例如,如果我有:
如果(x < 2*0.025){ ... }
2*0.025
每次都会计算吗?或者是否0.05
被替换为乘法运算不必每次都运行?
换句话说,使用0.05
而不是更有效2*0.025
吗?
例如,如果我有:
如果(x < 2*0.025){ ... }
2*0.025
每次都会计算吗?或者是否0.05
被替换为乘法运算不必每次都运行?
换句话说,使用0.05
而不是更有效2*0.025
吗?
我知道的每个编译器都实现了常量折叠,即在编译时计算常量表达式,所以没有区别。但是,该标准并未强制要求:
常量表达式可以在翻译期间而不是运行时进行评估,因此可以在常量可能存在的任何地方使用。
您可以使用某些编译器显式禁用此优化。例如,-frounding-math
禁用 gcc 中浮点表达式的常量折叠。
常量表达式是预先计算的。