Eles não são uma única palavra-chave se formos para o rascunho da seção padrão C ++. A tabela de 2.12 palavras-chave4 lista ambas ife elseseparadamente e não há else ifpalavra-chave. Podemos encontrar uma lista mais acessível de palavras-chave C ++ acessando a seção cppreferences sobre palavras-chave .
A gramática na seção 6.4também deixa isso claro:
selection-statement:
if ( condition ) statement
if ( condition ) statement else statement
O ifin else ifé uma declaração após o elsetermo. A seção também diz:
[...] A subinstrução em uma instrução de seleção (cada subinstrução, na
forma else da instrução if ) define implicitamente um escopo de bloco (3.3). Se a subinstrução em uma instrução de seleção for uma instrução única e não uma instrução composta , é como se ela tivesse sido reescrita para ser uma instrução composta contendo a subexposição original.
e fornece o seguinte exemplo:
if (x)
int i;
can be equivalently rewritten as
if (x) {
int i;
}
Então, como seu exemplo ligeiramente estendido é analisado?
if
statement_0;
else
if
statement_1;
else
if
statement_2 ;
será analisado assim:
if
{
statement_0;
}
else
{
if
{
statement_1;
}
else
{
if
{
statement_2 ;
}
}
}
Nota
Também podemos determinar que else ifnão pode ser uma palavra-chave percebendo que palavras-chave são identificadores e podemos ver a gramática de um identificador em minha resposta a Você pode iniciar o nome de uma classe com um dígito numérico? que espaços não são permitidos em identificadores e, portanto, else ifnão podem ser uma única palavra-chave, mas devem ser duas palavras-chave separadas .
else if