Предположим, что в С++ (или C, Java и т.д.) у меня есть такой код:
int a = f() > g() ? f() : g();
который, разумеется, присваивает a большее значение между возвращаемыми значениями f() и g(). Теперь, предполагая, что f() и g() сами являются сложными и медленными, следует заменить эту строку чем-то вроде
int f_value = f();
int g_value = g();
int a = f_value > g_value ? f_value : g_value;
так что ни f(), ни g() не будут вызываться дважды, или компилятор (при достаточной оптимизации) будет делать что-то подобное для меня, так что мне не нужно ничего делать?
Этот общий вопрос, конечно, относится ко многим аналогичным сценариям.