簡體   English   中英

c++ 標准中的 if..else 語句

[英]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()什么時候執行? Afalse時會發生嗎? 還是在AtrueBfalse

編譯器沒有邏輯方法來解決這種情況。 所以在正常的解析規則之外,6.3 聲明在這種模棱兩可的情況下,else 屬於內部if 語句。

不,編譯器說第二個 else 與 if 語句無關是不合邏輯的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM