举例来说,如果我有:每次执行它时,两个常量的乘积是否得到计算?
if(x < 2*0.025) { ... }
是否2*0.025
得到计算每一次?还是取代0.05
以便乘法运算不必每次都运行?
换句话说,使用0.05
而不是2*0.025
更有效吗?
举例来说,如果我有:每次执行它时,两个常量的乘积是否得到计算?
if(x < 2*0.025) { ... }
是否2*0.025
得到计算每一次?还是取代0.05
以便乘法运算不必每次都运行?
换句话说,使用0.05
而不是2*0.025
更有效吗?
每一个编译器,我知道器具constant folding,即计算在编译时常量表达式,所以没有区别。的标准,然而,并不要求它:
常量表达式可以平移,而不是在运行时间期间被评估,并且相应地,可以在该一个常数可以是任何地方被使用。
可以明确禁用这种优化的一些编译器。例如,-frounding-math
禁用gcc中的浮点表达式的常量折叠。
常数表达式预先计算。