2014-04-23 56 views
0

在C++中,如果我有一个已经为true的布尔值,并且我对它执行| =,那么它将保证仍然执行操作符右侧的任何内容?| =运营商,可能的短路评估?

例如:

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

我发现它正在执行的功能,但我需要知道,如果它的明确标准,这将保证执行的保证。我讨厌遇到基于某种优化或某些编译器而停止执行的问题。

+1

是。 '|'不做短路评估。 – Maroun

回答

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

将相当于

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

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

+2

不完全相同:'a | = b'会评估每个操作数一次,而'a = a | b'会评估'a'两次。 –

+0

@MikeSeymour总的来说是的,但是在这样的情况下,'a'是一个局部变量,真的没有区别,是吗? – zakinster

+0

事实上,如果额外的评估没有效果,那么没有区别。但值得一提的是,它并不总是相同的(这可以从你的措辞中推断出来)。 –

-1

尝试使用此,恕我直言,更清晰的语法来代替:

bool myBool = true; 

// ... 

if(someFcnThatReturnsBoolean()) 
    myBool = true; 
+0

此外|和| =运算符是逻辑或,||应该使用。一般来说,对于OR运算符,你将使用哪一个并不重要。然而,&和&&在行为上与真/假(0-1)以外的值不同。 – Toreno

+2

远不及OP要求的 –