表达式int中的隐式类型转换为double

Ano*_*ous 2 c++ performance implicit-typing

当我在代码中使用命名常量时,我​​一直在尝试减少隐式类型转换.例如而不是使用

const double foo = 5;
Run Code Online (Sandbox Code Playgroud)

我会用

const double foo = 5.0;
Run Code Online (Sandbox Code Playgroud)

这样就不需要进行类型转换.但是,在我做这样的事情的表达中......

const double halfFoo = foo / 2;
Run Code Online (Sandbox Code Playgroud)

是否将2评估为整数并且是否隐式转换?我应该使用2.0吗?

Jam*_*lis 5

2被隐式转换为双,因为foo是双.你必须要小心,因为如果foo是,例如,整数,将执行整数除法,然后结果将存储在halfFoo.

我认为总是使用浮点文字是好的做法(例如,2.0或者2.你打算将它们用作浮点值.它更加一致,可以帮助你找到可能出现这种事情的有害错误.

  • @Person:转换发生在编译时,而不是运行时,因此(运行时)性能不是问题.如果比较的LHS产生浮动或双重,则RHS应该是浮点数或双倍常数,以便人们阅读代码时的清晰度.但对于编译器来说,差异可以忽略不计. (3认同)