2013-02-11 59 views

回答

1

不,如果你有(價值& &什麼)和價值成爲虛假的一切都被忽略。

0

從邏輯上講,它並不需要,因爲第一個條件爲false會使整個語句爲false。這在技術上被稱爲「短路評估」。這就是爲什麼你不應該創建t2t3條件,產生副作用,並假設它們發生在循環的每個週期。

0

對於(j = 0;(T1 & & T2)& &(T2 & & T3); J ++); //應該工作

誤讀了問題。不,它不會。 C使用短路評估,這意味着一旦它是錯誤的,它是錯誤的。

1

for循環中以及在使用&&||的所有其他情況下,評估從左到右進行,直到答案已知。此時評估停止。這被稱爲短路

這是一個非常重要的功能,因爲它可以讓您通過在之前插入檢查來「保護」後續表達式。例如,

if (ptr != 0 && ptr->property == 42) { 
} 

不會崩潰的ptr == NULL僅短路的原因。如果不是這樣,程序員將被迫寫得不太愉快

if (ptr != 0) { 
    if (ptr->property == 42) { 
    } 
} 

以避免崩潰。

1

不,C和C++保證條件「短路」 - 意味着只要條件可以確定,「測試」就會停止 - 如果&&的內容爲假,那麼確定它永遠不會成爲true ,如果||中的內容爲true,則不能爲false。

這使得它的安全做這樣的事情:

if (ptr != NULL && ptr->x > 10) ... 
2

C的溫度將涉及邏輯AND和OR,所以只要表達式的結果是已知的短路表達式,評估將停止。給定的表達式爲:

t1 && t2 && t3 

因爲它是一個邏輯AND運算符,只要T1的判斷爲假,T2和T3的評估將被跳過,因爲總的結果是已知的。

1

ISO 9899 C standard(這個人是一個相當新的草案版本,但由於ANSI-C的草案這一特定段落已經存在)

不同的是按位二進制&運算符,& &運營商保證 從左到右評估;在第一個操作數的評估之後有一個序列點。 如果第一個操作數將 等於0,則第二個操作數不會被評估爲

重點煤礦,所以是的,編譯器必須儘快遇到的操作,這將導致它返回帶有短路邏輯和條件0.