В C ++, если у меня есть логическое значение, которое уже истинно, и я выполняю | = на нем, гарантированно все равно будет выполнено все, что находится справа от оператора?
Например:
bool myBool = true;
myBool |= someFcnThatReturnsBoolean();
Я обнаружил, что он выполняет эту функцию, но мне нужно знать, гарантируется ли стандартом явное выполнение этой функции. Я не хотел бы столкнуться с проблемой, когда он перестает выполняться на основе некоторой оптимизации или на определенных компиляторах.
bool myBool = true;
myBool |= someFcnThatReturnsBoolean();
будет эквивалентно
bool myBool = true;
myBool = myBool | someFcnThatReturnsBoolean();
Побитовое ИЛИ (|
) всегда будет вычислять оба операнда, поэтому ваша функция всегда будет вызываться.
Попробуйте использовать это, ИМХО более четкий синтаксис:
bool myBool = true;
// ...
if(someFcnThatReturnsBoolean())
myBool = true;