有時候爲了清晰起見,我在代碼中聲明瞭「一次使用」變量。這是否會顯着影響性能或者編譯器是否可以優化它?在C++中應該避免變量聲明嗎?
例如,我會傾向於做:
int minVal = long_arithmetic_expresion();
int maxVal = even_longer_expression();
for (int i = minVal; i < maxVal; i++)
{
// Do stuff not related to minVal or maxVal
}
double part1 = 4*sqrt(something)* ... // Very long thing
double part2 = 5*sqrt(something else)* ... // Very long thing
double interestingValue = part1/part2; // This is the only interesting variable for later
不是:
for (int i = long_arithmetic_expresion(); i < even_longer_expression(); i++)
{
// Do stuff not related to minVal or maxVal
}
double interestingValue = (4*sqrt(whatever)* ...)/(5*sqrt(something else)* ...);
for循環會被包含在將要多次調用函數,所以即使是很小的性能在我的情況下,收益將是相關的。
注:
因爲它很快就被指出,有一個機會,even_longer_expression()可以在循環,這當然是不好的每一步進行評估。 爲了清楚起見,我的問題涉及到聲明一次性變量的事實。 我在循環後添加了更多的代碼。我指的是變量part1和part2。
在你的例子中'int maxVal = even_longer_expression();'只應該被聲明 – Evgeny
'even_longer_expression()'將會被每次通過評估,所以當然不需要在那裏進行評估。 –
如果可能,'minVal'和'maxVal'應該是'const'或者甚至'constexpr'。它不僅可以防止您意外更改其值,還可以提示編譯器進行更多優化。 –