Я новичок в С++. Я часто вижу условное выражение, как показано ниже:
if
statement_0;
else if
statement_1;
Вопрос:
Синтаксически, я должен рассматривать else if
как одно ключевое слово? Или это действительно вложенный оператор if
внутри внешнего else
, как показано ниже?
if
statement_0;
else
if
statement_1;
Ответ 1
Они не являются одним ключевым словом, если мы перейдем к черновик стандарта С++ 2.12
Таблица ключевых слов 4
содержит список if
и else
отдельно, а ключевое слово else if
отсутствует. Мы можем найти более доступный список ключевых слов С++, перейдя в раздел cppreferences по ключевым словам.
Грамматика в разделе 6.4
также делает это ясно:
selection-statement:
if ( condition ) statement
if ( condition ) statement else statement
if
in else if
- это выражение, следующее за термином else
. В разделе также говорится:
[...] Подстановка в выводе-заявлении (каждое подзадача в else формы оператора if) неявно определяет область блока (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
не может быть одним ключевым словом, понимая, что ключевые слова являются идентификаторами, и мы можем видеть из грамматики идентификатора в моем ответе на Можете ли вы начать имя класса с числовой цифрой?, что пробелы не допускаются в идентификаторах, поэтому else if
не может быть одним ключевым словом, но должно быть двумя отдельными ключевыми словами.
Ответ 2
Синтаксически это не одно ключевое слово; ключевые слова не могут
содержат пробел. Логически, при написании списков else
if
, вероятно, лучше, если вы видите это как одно ключевое слово,
и напишите:
if ( c1 ) {
// ...
} else if ( c2 ) {
// ...
} else if ( c3 ) {
// ...
} else if ( c4 ) {
// ...
} // ...
Компилятор буквально видит это как:
if ( c1 ) {
// ...
} else {
if ( c2 ) {
// ...
} else {
if ( c3 ) {
// ...
} else {
if ( c4 ) {
// ...
} // ...
}
}
}
но обе формы выходят на одно и то же, а первое - далеко
более читаемым.
Ответ 3
Нет, это не так.
Это два ключевых слова, и, кроме того, второе "если" является субстанцией "внутри" области, определяемой первым "else".
Ответ 4
Вы можете увидеть область действия, используя фигурные скобки:
if(X) {
statement_0;
}
else {
if(Y) {
statement_1;
}
}
И обычно реализуется с двумя разными ключевыми словами, один из них, если и один - это еще.
Ответ 5
Как уже было сказано, это не так. Это два ключевых слова. Это начало двух утверждений, следующих друг за другом. Чтобы попытаться сделать это более понятным, вот графа BNF, которая имеет дело с операторами if
и else
на языке С++.
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
возможны и действительны в соответствии со стандартом/семантикой С++.
Примечание: грамматика С++ берет с этой страницы.
Ответ 6
else и если это два разных ключевых слова С++ . За инструкцией if может следовать необязательный else if... else. Оператор if может иметь ноль или более, если и они должны быть перед else.
Синтаксис и пример можно найти в этом if... else statement tutorial
Ответ 7
За инструкцией if может следовать необязательный оператор else if... else, который очень полезен для тестирования различных условий, используя оператор single if... else if.
При использовании инструкций if, else if, else осталось несколько соображений.
An if может иметь нуль или один другой, и он должен появиться после любого другого if.
An if может иметь нуль для многих других, если они должны быть перед else.
Как только else, если удастся, никто из него не останется другим, если или будет проверен.
посмотрите if... else statement tutorial.
Ответ 8
Я хотел бы просто добавить свою точку зрения ко всем этим объяснениям. Как я вижу, если вы можете использовать эти ключевые слова отдельно, они должны быть ДВА ключевых слов.
Возможно, вы можете взглянуть на грамматику С++, из этой ссылки в stackoverflow:
Существует ли стандартная грамматика С++?
Привет