3

例如,如果我有:

如果(x < 2*0.025){ ... }

2*0.025每次都会计算吗?或者是否0.05被替换为乘法运算不必每次都运行?

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

4

2 回答 2

5

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

常量表达式可以在翻译期间而不是运行时进行评估,因此可以在常量可能存在的任何地方使用。

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

于 2012-02-19T02:36:19.833 回答
0

常量表达式是预先计算的。

于 2012-02-19T02:34:21.237 回答