繁体   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