c++ - 基本类型的显式类型转换 "operators"之间有区别吗?

标签 c++

简单的事情:我想“转换”,例如一个float进入double 。目前我知道的有三种方式:

float v = 4.2f;
  1. double u = (double)v;
  2. double u = double(v);
  3. double u = static_cast<double>(v);
  4. double u(v); 编辑:只是将其视为第四个选项!

这些是相同的还是有任何细微的差别?您建议使用什么?

请注意,这个问题仅与 int、char、float 等基本类型相关,与指针、POD 或类无关。

最佳答案

double u = (double)v;double u = static_cast<double>(v);是等价的,因为这两种情况都使用标准转换。然而double u = double(v);创建一个临时 double 对象(无论如何都可以对其进行优化),然后将其用于初始化 u 。但既然无论如何都会使用所有三种类型的强制转换来创建临时对象,那么是的,它是相同的。

从三static_cast应该是首选。多输入几个字符,但从长远来看,它更好,因为首先您明确指定了转换类型,而且由于转换通常是可疑的,因此您可以以非常生动的方式进行操作

关于c++ - 基本类型的显式类型转换 "operators"之间有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4194821/

相关文章:

c++ - 在 C++ 中使用非常量引用作为 const

c++ - 如何判断多维数组中的元素是否为空

C++ #pragma omp 并行 : big tasks or small ones?

c++ - ARM原子性能

c++ - 为什么这个使用未签名产品的简单功能不起作用?

C++多重继承/虚继承

c++ - 类模板的公共(public)继承意外失败

c++ - boost 相当于memcpy?

c++ - 用于 C++ 代码可视化的 Python 模块

c++ - 如何在C++中比较 vector 的元素?