int64_t a = 1234;
double d = (double) a;
这是推荐的方式吗?
答案 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,或者为类类型执行构造函数。