代码之家  ›  专栏  ›  技术社区  ›  Danvil

对于基本类型,显式类型转换“运算符”之间是否存在差异?

c++
  •  2
  • Danvil  · 技术社区  · 14 年前

    简单的一点:我想“转换”例如 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或类。

    2 回复  |  直到 14 年前
        1
  •  4
  •   Armen Tsirunyan    14 年前

    double u = (double)v; double u = static_cast<double>(v); 是等效的,因为在这两种情况下都使用标准转换。然而 double u = double(v); 创建一个临时的double对象(无论如何都可以进行优化),然后用于初始化 u . 不过,既然一个临时演员是用这三种类型的演员来创造的,那么,是的,它是一样的。

    从三个 static_cast 最好是。多输入几个字符,但从长远来看更好,因为首先要明确指定类型转换,而且类型转换通常是可疑的,所以要以非常生动的方式进行

        2
  •  0
  •   Mark B    14 年前

    那怎么办 double u = v; 并让编译器从 float double ?

    如果要显式显示转换 static_cast 是首选的C++方式。它更多的是输入,但它精确地告诉编译器您希望进行哪种转换。