c ++标准中的if..else语句

时间:2014-07-04 12:22:50

标签: c++ if-statement

从C ++标准第6.4.1节: if语句

  

如果条件(6.4)产生真,则执行第一个子语句。如果是其他部分的选择   语句存在,条件产生错误,第二个   子语句被执行。在if语句的第二种形式(一种   如果第一个子语句也是if语句,则包括else)   那个内部的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

我认为其他if(){} 声明是来自 if(){} else {} 的单独声明。 现在看来这个 else if {} 语句只是一个else语句,里面有 if(){} ,所以这两个代码是相等的:

if(condition) {

    }
    else {
        if(condition) {

        }
    }

if(condition) {

    }
    else if(condition) {

    }

现在如果我们有多个if-s怎么办?这些代码在C ++中也是相同的:

if(condition) {

    }
    else {
        if(condition) {

        }
        else {
            if(condition){

            }
        }
    }

if(condition) {

    }
    else if {

    }
    else if {

    }

关于最后一个代码:当我们编写一个没有花括号的else语句时,只有第一个语句与 else 相关联,因为其他语句不属于 else (他们不是第一个声明的花括号)。因此,编译器说第二个 else 与if语句没有关联是不合逻辑的?

4 个答案:

答案 0 :(得分:7)

if (condition) statement else statement

是一个选择语句。这意味着整个if...else是之前else的替代。

或者换句话说,你开始从底部汇总语句。

答案 1 :(得分:4)

else是其对应的if语句的一部分。在以下情况下:

if(condition) {

}
else if {

}
else if {

}

嵌套语句如下:

if (condition) { } else // first statement
  if { } else           // second statement
    if { }              // third statement

因此第二个else与第二个if相关联。

答案 2 :(得分:3)

这些规则的原因是解决称为Dangling else问题的问题。

它在这样的代码中崭露头角......

if (A) 
if (B) DoB();
else DoC();

DoC()何时执行?当A是假的时候会发生吗?或者当A为真且B为假时会发生吗?

编译器没有逻辑方式来解决这种情况。因此,在正常的解析规则之外,6.3声明在这种不明确的情况下,else属于 inner if语句。

答案 3 :(得分:1)

不,编译器说第二个else与if语句没有关联是不合逻辑的。