将int64_t转换为double

kal*_*kal 16 c++ type-conversion

  int64_t a = 1234;

  double d = (double) a;
Run Code Online (Sandbox Code Playgroud)

这是推荐的方式吗?

Tom*_*Tom 16

使用static_cast作为strager答案.我建议不要使用隐式转换(或者甚至是C++源代码中的C风格转换),原因如下:

  • 隐式强制转换是编译器警告的常见来源,这意味着您可能会在构建中添加噪声(现在或稍后添加更好的警告标志时).
  • 你身后的下一个维护程序员会看到隐式演员,需要知道它是故意行为还是错误/错误.这样static_cast可以使您的意图立即变得明显.
  • static_cast而其他C++风格的演员阵容很容易grep处理.

  • 关于"意图":特别是当赋值远离d的声明时,static_cast <double>违反了DRY.d = static_cast <typeof(d)>(a)在这方面更好,但后来我失去了生活的意愿,并且可能d = a毕竟会更好;-) (4认同)

str*_*ger 7

您应该使用static_cast或依赖隐式强制转换:

int64_t a = 1234;
double d = static_cast<double>(a);
double f = a;
Run Code Online (Sandbox Code Playgroud)


dcw*_*dcw 5

您还可以使用转换语法,它相当于 static_cast:

int64_t a = 1234;
double d = double(a);
Run Code Online (Sandbox Code Playgroud)

这是一个有用的语法结构,因为它允许在模板代码中以相同的方式处理基元类型和类类型,或者为基元执行 static_cast,或者为类类型调用构造函数。