| =运算符,可能的短路评估?

时间:2014-04-23 16:02:04

标签: c++ bitwise-operators short-circuiting

在C ++中,如果我有一个已经为真的布尔值,并且我对它执行了| =,那么保证它仍然可以执行运算符右边的任何内容吗?

例如:

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

我发现它正在执行该功能,但我需要知道标准是否明确保证它是否可以保证执行。我讨厌遇到一个基于某些优化或某些编译器停止执行的问题。

2 个答案:

答案 0 :(得分:3)

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

等同于

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

按位OR(|)将始终评估两个操作数,因此将始终调用您的函数。

答案 1 :(得分:-1)

尝试使用这个,恕我直言更清晰的语法:

bool myBool = true;

// ...

if(someFcnThatReturnsBoolean())
  myBool = true;