[英]if..else statement in the c++ standard
來自 C++ 標准第 6.4.1 節: if 語句:
如果條件 (6.4) 為真,則執行第一個子語句。 如果存在選擇語句的 else 部分並且條件產生假,則執行第二個子語句。 在 if 語句的第二種形式(包括 else 的那個)中,如果第一個子語句也是一個 if 語句,則該內部 if 語句應包含 else 部分。
第 6.4 節:選擇聲明:
Selection statements choose one of several flows of control.
selection-statement:
if ( condition ) statement
if ( condition ) statement else statement
condition:
expression
attribute-specifier-seqopt decl-specifier-seq declarator = initializer-clause
attribute-specifier-seqopt decl-specifier-seq declarator braced-init-list
我認為else if() {}語句是與if() {}和else {}分開的語句。 現在看來這個else if {}語句只是一個 else 語句,里面有它自己的if() {}所以這兩個代碼是相等的:
if(condition) {
}
else {
if(condition) {
}
}
if(condition) {
}
else if(condition) {
}
現在如果我們有多個 else if-s 呢? 這些代碼在 C++ 中也相同:
if(condition) {
}
else {
if(condition) {
}
else {
if(condition){
}
}
}
if(condition) {
}
else if {
}
else if {
}
關於最后一個代碼:當我們編寫一個沒有大括號的 else 語句時,只有第一條語句與else相關聯,因為其他語句不是else 的一部分(它們不在第一條語句的大括號中)。 那么編譯器說第二個else與 if 語句無關,這不是合乎邏輯的嗎?
if (condition) statement else statement
是一個單一的選擇語句。 這意味着整個if...else
是前一個else
的子語句。
或者換句話說,您開始從底部開始匯總報表。
else
是它對應的if
語句的一部分。 如果是:
if(condition) {
}
else if {
}
else if {
}
嵌套語句如下:
if (condition) { } else // first statement
if { } else // second statement
if { } // third statement
所以第二個else
與第二個if
相關聯。
這些規則的原因是為了解決一個稱為Dangling else問題的問題。
它在這樣的代碼中抬起頭......
if (A)
if (B) DoB();
else DoC();
DoC()
什么時候執行? 當A
為false
時會發生嗎? 還是在A
為true
而B
為false
?
編譯器沒有邏輯方法來解決這種情況。 所以在正常的解析規則之外,6.3 聲明在這種模棱兩可的情況下,else 屬於內部if 語句。
不,編譯器說第二個 else 與 if 語句無關是不合邏輯的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.