将int64_t转换为double

时间:2009-03-28 01:01:54

标签: c++ type-conversion

  int64_t a = 1234;

  double d = (double) a;

这是推荐的方式吗?

4 个答案:

答案 0 :(得分:15)

使用static_cast作为strager答案。我建议使用隐式强制转换(或者甚至是C ++源代码中的C样式强制转换)来反对,原因如下:

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

答案 1 :(得分:7)

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

int64_t a = 1234;
double d = static_cast<double>(a);
double f = a;

答案 2 :(得分:4)

对于POD类型,两个版本都做同样的事情。选择您喜欢的并保持一致。

我知道许多人更喜欢前者的打字/阅读能力而且我倾向于同意这一点,但我可以和任何人一起生活。

我多次听过“易于grep for”这个论点但是还没有遇到过我需要为POD演员编写代码库的情况。

答案 3 :(得分:4)

您还可以使用转换语法,该语法等同于static_cast:

int64_t a = 1234;
double d = double(a);

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