考慮優化行爲,並與
bool Fun1()
{
...
}
bool Fun2()
{
}
而且某處主代碼我可以有
if(Fun1() && Fun2()) //option-1
{
}
或
if(Fun1() & Fun2()) //option-2
{
}
這似乎與VS2012,與option-1
這是不確保這兩個功能總是在上發生。特別是如果其中一個函數返回false
,則其他函數不會執行option-1
。然而,整體代碼要求他們都評估正確的行爲,我可以通過option-2
來實現。我想知道option-2
的這種行爲是否可以從編譯器更改爲編譯器(也包含優化級別),還是由標準保證?
我想我可以這樣說:由於'&&'和比較運算符要求雙方都是正確的,那麼如果第一面是假的,它不需要評估第二面。而'&'Bit-wise並且需要雙方在應用之前進行評估。 –
option2的行爲不會改變,但有一些怪癖。主要是如何在工具集中定義bool。儘管如此,「&」將始終評估兩個結果。 –
@Tomasz Plaskota這就是我所擔心的。優化器是否有可能理解函數的返回值是'bool',因此在技術上不需要評估它們中的一個是否爲假。 – user6386155