Подтвердить что ты не робот

Является ли "else if" одним ключевым словом?

Я новичок в С++. Я часто вижу условное выражение, как показано ниже:

if 
  statement_0;
else if
  statement_1;

Вопрос:

Синтаксически, я должен рассматривать else if как одно ключевое слово? Или это действительно вложенный оператор if внутри внешнего else, как показано ниже?

if 
  statement_0;
else 
  if
    statement_1;
4b9b3361

Ответ 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: Существует ли стандартная грамматика С++?

Привет