1. ホーム
  2. c++

[解決済み] else ifは1つのキーワードか?

2022-12-08 04:02:39

質問

C++の初心者です。以下のような条件文をよく見かけます。

if 
  statement_0;
else if
  statement_1;

質問です。

構文的に というように else if を一つのキーワードとして扱うべきでしょうか?それとも、実際にはネストされた if 文の中にある else のようなものですか?

if 
  statement_0;
else 
  if
    statement_1;

どのように解決するのですか?

キーワードは1つではありません。 C++ 標準のドラフト セクション 2.12 キーワード テーブル 4 の両方をリストアップします。 ifelse が別々に存在し else if キーワードはありません。 私たちは、よりアクセスしやすい C++ の キーワード にアクセスすることで キーワードに関するcppreferencesのセクション .

セクションの文法 6.4 の文法もこれを明確にしています。

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

ifelse 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 が1つのキーワードになり得ないことを理解することで キーワード 識別子 に対する私の回答にある識別子の文法からわかります。 クラス名を数字で始めることができますか? にはスペースは許されないということです。 識別子 であり、従って else if は単一の キーワード である必要はなく、2つの別々の キーワード .