舉例來說,如果我有:每次執行它時,兩個常量的乘積是否得到計算?
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中的浮點表達式的常量摺疊。
常數表達式預先計算。