У меня есть такой код, и мне трудно его прочитать:
// code1
if( (expensiveOperation1() && otherOperation() && foo())
|| (expensiveOperation2() && bar() && baz()) {
// do something
}
Я просто изменил его на следующее, чтобы сделать его более читабельным:
// code2
const bool expr1 = expensiveOperation1() && otherOperation() && foo();
const bool expr2 = expensiveOperation2() && bar() && baz();
if(expr1 || expr2){
// one of the conditions met
}
Но должен ли я сейчас беспокоиться об эффективности?
Я имею в виду, что в code1
, если первое конъюнктивное предложение выполнено, тогда даже не стоит смотреть на второе, потому что уже ясно, что утверждение будет верным.
Но в моем более читаемом примере должны быть вычислены как cond1
, так и cond2
. Или компилятор будет достаточно умен, чтобы изменить мой code2
на code1
, если expr2 больше нигде не используется?