"else if"是一个关键字吗?
Is "else if" a single keyword?
我是c++新手。我经常看到这样的条件语句:
if
statement_0;
else if
statement_1;
问题:
语法上,我是否应该将else if
视为单个关键字?或者它实际上是在外部else
内嵌套的if
语句,如下所示?
if
statement_0;
else
if
statement_1;
如果我们去看c++标准草案2.12
Keywords表4
分别列出了if
和else
,没有else if
关键字,它们不是一个单一的关键字。我们可以在关键字的cppreferences部分找到一个更容易访问的c++ 关键字列表。
6.4
节中的语法也说明了这一点:
selection-statement:
if ( condition ) statement
if ( condition ) statement else statement
else if
中的if
是else
项后面的语句。该部分还说:
[…选择语句中的子语句(每个子语句,在if语句的else形式)隐式地定义了块作用域(3.3)。如果选择语句中的子语句是单个语句和不是复合语句,就好像它被重写成了一个包含原始子语句的复合语句。
,并提供如下示例:
if (x)
int i;
can be equivalently rewritten as
if (x) {
int i;
}
那么你的稍微扩展的例子是如何解析的?
if
statement_0;
else
if
statement_1;
else
if
statement_2 ;
将这样解析:
if
{
statement_0;
}
else
{
if
{
statement_1;
}
else
{
if
{
statement_2 ;
}
}
}
注意
我们也可以通过认识到关键字是标识符来确定else if
不能是一个关键字,我们可以从我的回答can you start a class name with a numeric digit中的标识符语法中看到?标识符中不允许有空格,因此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 ) {
// ...
} // ...
}
}
}
但是两种形式的结果是一样的,第一种形式是far更具可读性。
不,它不是。
它们是两个关键字,而且,第二个"if"是由第一个"else"语句确定的范围内的子语句。
您可以使用大括号来查看作用域:
if(X) {
statement_0;
}
else {
if(Y) {
statement_1;
}
}
通常由两个不同的关键字实现,一个是if,一个是else。
正如已经回答的那样,它不是。它们是两个关键词。它是两个语句的开头一个接一个。为了让它更清楚一点,下面是c++语言中处理if
和else
语句的BNF语法。
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++语法参考本页
else和if是两个不同的c++关键字。if语句可以后跟可选的else if…语句。if语句可以有0个或多个else if,它们必须出现在else之前。
你可以找到语法和例子在这个if…Else语句教程
我只想在所有这些解释中加入我的观点。在我看来,如果你可以单独使用这些关键字,它们必须是两个关键字。也许你可以看看c++语法,从这个链接在stackoverflow:有标准的c++语法吗?
对
if语句后面可以跟一个可选的else if…Else语句,这对于测试使用单个if…Else if语句
在使用if、else if、else语句时,有几点需要注意。
一个if可以是0或一个else,并且必须在任何其他if之后。
一个if可以有0到多个其他if,它们必须出现在else之前。
一旦一个else if成功,其余的else if或else if都不会被测试。
看一看……Else语句教程
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- Visual Studio 2015:Extern "C" 和 "export" 关键字
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 只要我不包含一个标题,重新定义C++关键字合法吗
- C 有一个关键字,允许从派生类引用基本类型
- 以std::字符串作为关键字,按字典顺序对一个无序映射进行排序
- 设计了一个基于两个关键字的搜索系统
- 在 VC++ 中访问一个文件中声明的变量.(外部关键字用法)
- 虚拟继承:当只有一个基类具有"虚拟"关键字时,为什么它有效?有没有更好的方法?
- c++:通过关键字获取枚举值,关键字是一个变量
- 包含一个图形节点作为关键字的无序映射
- 从constexpr函数返回一个类需要使用g++的virtual关键字
- 是否可以从一个特定模板实例化的构造函数中删除关键字"显式"?
- 如果我在互斥锁之间声明一个变量并返回它,我需要使用volatile关键字吗?
- "else if"是一个关键字吗?
- nullptr 不是一个特殊的关键字和 std::nullptr_t 的对象吗?
- 用一个新关键字扩展c++
- 当重写一个方法时,虚拟关键字是什么意思
- 如何找到小于STL集搜索关键字的第一个值
- 当我们在该类的头文件中定义一个类成员函数时,必须使用内联关键字.为什么