什麼時候您需要使用非短路邏輯運算符或?換句話說...邏輯運算符或無短路
什麼時候使用
if(x == 1 | x==2)
而不是
if(x == 1 || x==2)
如果第一個條件是真的......那麼整個語句已經成爲事實。
更新:和&同樣的問題,& &
什麼時候您需要使用非短路邏輯運算符或?換句話說...邏輯運算符或無短路
什麼時候使用
if(x == 1 | x==2)
而不是
if(x == 1 || x==2)
如果第一個條件是真的......那麼整個語句已經成爲事實。
更新:和&同樣的問題,& &
一個例子出現,如果我們有兩個功能,我們希望他們既要執行:
if (foo() | bar())
如果我們使用||
,然後如果foo()
返回true,則bar()
將不會執行,這可能不是我們想要的。 (雖然這是有些晦澀案件,並且往往不是||
是的更合適的選擇)
類似的情況可以想出&
/&&
:
if (foo() & bar())
如果我們使用了&&
,那麼bar()
將不會執行,如果foo()
返回false,這再次可能不是我們想要的。
也當你有if(x == 1 | x ++ > 2)... – 2014-09-26 02:03:52
@shinjw更新回答。 – arshajii 2014-09-26 02:05:35
好吧,有幾個原因。看看下面的例子:
if(someImportantMethod() | otherImportantMethod())
{
doSomething();
}
如果您需要這兩種方法來運行,不管其他方法的結果,那麼你不得不使用|
而不是||
。
需要注意的是短路操作數稍微慢一些(儘管性能影響通常不可忽略)。
根據你的問題,
如果你使用「|」運算符如「if(x == 1 | x == 2)」,對兩個表達式進行求值並且如果至少有一個TRUE值,則運行if塊的主體
如果使用「||」如果「if(x == 1 || x == 2)」,第一個表達式被評估,並且如果它返回TRUE,則不會評估第二個表達式並運行if塊的主體,如果使用「&」操作符,如「如果(X == 1 & X == 2)」,既表達式進行求值,並且如果兩個表達式都返回TRUE值,則運行的,如果塊
如果使用「& &身體「運算符」如果(x == 1 x == 2)「,則評估第一個表達式,如果它返回FALSE,則不會評估第二個表達式並且不運行if塊的主體
此外,「||」和「& &」可以用來節省您的應用程序的運行時間
我問Josh Bloch自己這個問題一次,他給了另一個可能的原因,IIRC:表現。非短路版本沒有分支。如果第二個操作數非常便宜,第一個操作數幾乎總是真的,那麼避免對第二個操作數進行條件評估可能會更快,並且讓處理器無需等待即可執行。
你想知道這個「布爾類型」?對於整型類型,邏輯或運算符本身非常有用,但短路運算不是一種替代方案,因爲它不能對整型進行操作。 – 2014-09-26 02:04:13
在這裏看到答案:http://stackoverflow.com/questions/9264897/reason-for-the-exsistance-of-non-short-circuit-logical-operators – Halogen 2014-09-26 02:22:27