在C++中,如果我有一个已经为true的布尔值,并且我对它执行| =,那么它将保证仍然执行操作符右侧的任何内容?| =运营商,可能的短路评估?
例如:
bool myBool = true;
myBool |= someFcnThatReturnsBoolean();
我发现它正在执行的功能,但我需要知道,如果它的明确标准,这将保证执行的保证。我讨厌遇到基于某种优化或某些编译器而停止执行的问题。
在C++中,如果我有一个已经为true的布尔值,并且我对它执行| =,那么它将保证仍然执行操作符右侧的任何内容?| =运营商,可能的短路评估?
例如:
bool myBool = true;
myBool |= someFcnThatReturnsBoolean();
我发现它正在执行的功能,但我需要知道,如果它的明确标准,这将保证执行的保证。我讨厌遇到基于某种优化或某些编译器而停止执行的问题。
bool myBool = true;
myBool |= someFcnThatReturnsBoolean();
将相当于
bool myBool = true;
myBool = myBool | someFcnThatReturnsBoolean();
按位OR(|
)将始终评估两个操作数,因此,你的函数总是被调用。
不完全相同:'a | = b'会评估每个操作数一次,而'a = a | b'会评估'a'两次。 –
@MikeSeymour总的来说是的,但是在这样的情况下,'a'是一个局部变量,真的没有区别,是吗? – zakinster
事实上,如果额外的评估没有效果,那么没有区别。但值得一提的是,它并不总是相同的(这可以从你的措辞中推断出来)。 –
尝试使用此,恕我直言,更清晰的语法来代替:
bool myBool = true;
// ...
if(someFcnThatReturnsBoolean())
myBool = true;
此外|和| =运算符是逻辑或,||应该使用。一般来说,对于OR运算符,你将使用哪一个并不重要。然而,&和&&在行为上与真/假(0-1)以外的值不同。 – Toreno
远不及OP要求的 –
是。 '|'不做短路评估。 – Maroun