每次执行时,是否会计算两个常量的乘积?

Rya*_*yan 3 c++ performance processing-efficiency

例如,如果我有:

if(x < 2*0.025) { ... }

是否2*0.025得到计算每一次?或者是否0.05取代,以便乘法操作不必每次都运行?

换句话说,使用它0.05而不是更有效2*0.025吗?

das*_*ght 5

我知道的每个编译器都实现了常量折叠,即在编译时计算常量表达式,因此没有区别.但是,该标准并未强制要求:

可以在转换期间而不是运行时期间评估常量表达式,并且因此可以在常量可以在任何地方使用.

您可以使用某些编译器显式禁用此优化.例如,-frounding-math禁用gcc中浮点表达式的常量折叠.