[英]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.