2015-10-14 70 views
3

什麼爲一個函數之間像不同:布爾表達式在while循環中的重要性?

int a, b; 
bool p = false; 
while (cin >> a >> b and not p) { // code } 

// and: 

int a, b; 
bool p = false; 
while (not p and cin >> a >> b) { // code } 
+3

'not'和'and'通常分別以'!'和'&&'的形式在C++中編寫。 –

回答

7

不同的是,在C++中,在評估布爾條件的快捷方式被執行。

and的情況下,您知道如果第一個語句爲假,則整個輸出爲false。在這種情況下,第二個條件根本不會被評估。同樣,如果or語句中的第一條語句評估爲true,則不評估第二條語句。

那麼,爲什麼這是有用的,除了在評估第二個陳述中節省的小的努力。其中一種情況是AND其中,如果第一個表達式爲假,則可能不希望對第二個表達式進行評估。造成這種情況的原因是,如果第一個語句是錯誤的,則第二個表達式可能會被定義爲不正確

例如,訪問while循環中的向量元素時,可能會遇到檢查某些條件的情況。除此之外,您還必須注意確保索引在矢量範圍內。所以,你可以只寫

while (i < vector.size() && condition(vector[i])) 

你可以看到,如果第一部分的計算結果爲false,然後程序會根據在條件訪問vector[i]崩潰。但是,它沒有達到那一點。這只是短路操作人員的衆多用途之一。

+0

'AND'和'OR'不是C++關鍵字。 '和'和'或'是。 – Steve

+0

完美!謝謝你,我正在用我的頭破 – KooPad

+0

@Steve:很好的指出。我個人從不使用'和'和'或'。我更喜歡'&&'和'||'。我只是爲了指出它們是布爾運算符而寫它們。 – therainmaker

2

是的訂單是重要的,因爲short circuit evaluation

while (cin >> a >> b and not p) 

將在輸入和如果操作成功,那麼它將評估p。如果輸入失敗,那麼我們結束循環並從不檢查p。在另一方面:

while (not p and cin >> a >> b) 

將評估p如果not pfalse則條件的其餘部分將不會被執行。