是“其他如果”一个关键字?

我是C ++新手。 我经常看到如下的条件语句:

if statement_0; else if statement_1; 

题:

在句法上else if作为单个关键字,我应该处理else if吗? 或者,它实际上是一个嵌套的if语句在外面else像下面?

 if statement_0; else if statement_1; 

如果我们转到C ++标准草案部分,则它们不是单个关键字2.12 关键字4列出了ifelse分别,并且没有else if关键字。 通过转到关键字的cppreferences部分,我们可以find一个更容易理解的C ++ 关键字列表。

6.4节中的语法也清楚地表明了这一点:

 selection-statement: if ( condition ) statement if ( condition ) statement else statement 

ifelse ifelse if 语句后面的语句 。 该部分还说:

[…] select语句中的语句 (每个子语句if语句的其他forms)都隐式定义了一个块范围(3.3)。 如果select语句中的子语句是单个语句而不是复合语句 ,就好像它被重写为包含原始子语句的复合语句。

并提供以下示例:

 if (x) int i; can be equivalently rewritten as if (x) { int i; } 

那么如何parsing你的稍微扩展的例子?

 if statement_0; else if statement_1; else if statement_2 ; 

将被parsing如下:

 if { statement_0; } else { if { statement_1; } else { if { statement_2 ; } } } 

注意

我们也可以通过认识到关键字标识符来确定else if不能是一个关键字,我们可以从我的答案中的标识符的语法中看到你能用一个数字开始一个类名吗? 在标识符中不允许使用空格,所以else if不能是单个关键字,但必须是两个单独的关键字

在语法上,它不是一个关键字; 关键字不能包含空格。 从逻辑上讲,在编写else if列表else if ,如果将其看作单个关键字,可能会更好,然后编写:

 if ( c1 ) { // ... } else if ( c2 ) { // ... } else if ( c3 ) { // ... } else if ( c4 ) { // ... } // ... 

编译器从字面上看到:

 if ( c1 ) { // ... } else { if ( c2 ) { // ... } else { if ( c3 ) { // ... } else { if ( c4 ) { // ... } // ... } } } 

但是两种forms都是相同的,第一种forms更具可读性。

不它不是。
它们是两个关键字,而且,第二个“if”是在第一个“else”语句确定的范围内的“子”。

您可以使用大括号来查看范围:

 if(X) { statement_0; } else { if(Y) { statement_1; } } 

通常用两个不同的关键字来实现,一个是ifelse

如已经回答的那样,事实并非如此。 他们是两个关键字。 这是两个一个接一个的开始。 为了更清楚一点,下面是用C ++语言处理ifelse语句的BNF gramar。

  statement: labeled-statement attribute-specifier-seqopt expression-statement attribute-specifier-seqopt compound-statement attribute-specifier-seqopt selection-statement attribute-specifier-seqopt iteration-statement attribute-specifier-seqopt jump-statement declaration-statement attribute-specifier-seqopt try-block selection-statement: if ( condition ) statement if ( condition ) statement else statement 

请注意, statement本身包含selection-statement 。 所以,组合如:

 if (cond1) stat else if(cond2) stat else stat 

根据C ++标准/语义是可能的和有效的。

注意:C ++语法取自这个页面。

否则如果是两个不同的C ++ 关键字 。 一个if语句可以跟一个可选的else ifelse语句。 一个if语句可以有零个或多个其他的,如果它们必须在其他的之前。

你可以在这个if … else语句教程中find语法和例子

我只想把所有这些解释都加上我的观点。 正如我所看到的,如果您可以分别使用这些关键字,那么它们必须是两个关键字。 也许你可以看看在c + +语法,从这个链接在计算器: 是否有一个标准的C ++语法?

问候

一个if语句可以跟一个可选的else if … else语句,这对使用单个if … else if语句来testing各种条件是非常有用的。

当使用if,else if,else语句时,有几点要注意。

一个if可以有零个或另外一个,它必须在任何其他if之后。

一个如果可以有零到其他许多,如果它们必须先于其他。

一旦一个成功,其他人都不会被testing。

看看if … else语句教程 。