2017-02-10 57 views
0

讓我們說我有一個條件,如果該檢查的事件A,B,C,...是真實的一個,如圖所示:如果有多個OR子句條件

if(a || b || c || .... || z) 
    do something 

我的問題是,讓我們說,條件C成爲事實。那麼程序會評估d到z的條件還是繼續執行「do something」指令?

+1

取決於選擇的編程語言,但大多數第一個真正會中斷檢查 – baao

+1

它通常被稱爲[短路](https://en.wikipedia.org/wiki/Short-circuit_evaluation)'ing評測 – birdspider

+0

只是測試它... –

回答

0

使用||將評估從左到右的每個條件,直到它達到真值。然後它會停止檢查。

if(a || b || c || .... || z) 

如果使用|,則將評估每個條件,而不管結果如何。

if(a | b | c | .... | z) 
0

假設我們有int a = b = c = 1
如果我的++a || ++b;,a會在語句後2,因爲一個OR子句只需要其中一個條件需要爲真,並且b將保持爲1,因爲編譯器不會繼續檢查它,因爲表達式已經是真的了。
然而,如果我們有--a || ++ba評估爲0,就邏輯而言將是false。所以它繼續檢查其他條件:b將是2,這在邏輯上是正確的。
那麼你需要記住什麼?

  • Compiler將評估這些條件由左到右
  • 如果或條件之一爲真,編譯器甚至不繼續評估其他條件,是這將是真正的不管對方條件爲真或假
  • AND條件需要兩個條件都爲真,因此如果第一個條件爲假,則整個表達式保證爲假,因此編譯器不會繼續評估其他條件。但是,如果第一個是真的,編譯器必須檢查其他條件是否正確。

這一切都被稱爲

短路評價

如需更多信息,請單擊here.

0

這就是所謂的短路評價。例如,java從左到右檢查它;意味着如果c爲真,它不會檢查該部分的其餘部分。

但這不適用於所有語言。 例如,csh從右向左執行短路評估。