| = оператор, возможна оценка короткого замыкания?

В C ++, если у меня есть логическое значение, которое уже истинно, и я выполняю | = на нем, гарантированно все равно будет выполнено все, что находится справа от оператора?

Например:

bool myBool = true;
myBool |= someFcnThatReturnsBoolean();

Я обнаружил, что он выполняет эту функцию, но мне нужно знать, гарантируется ли стандартом явное выполнение этой функции. Я не хотел бы столкнуться с проблемой, когда он перестает выполняться на основе некоторой оптимизации или на определенных компиляторах.

0

Решение

bool myBool = true;
myBool |= someFcnThatReturnsBoolean();

будет эквивалентно

bool myBool = true;
myBool = myBool | someFcnThatReturnsBoolean();

Побитовое ИЛИ (|) всегда будет вычислять оба операнда, поэтому ваша функция всегда будет вызываться.

3

Другие решения

Попробуйте использовать это, ИМХО более четкий синтаксис:

bool myBool = true;

// ...

if(someFcnThatReturnsBoolean())
myBool = true;
-1

По вопросам рекламы [email protected]