2014-04-23 100 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要求的 –