web-dev-qa-db-ja.com

「else if」は単一のキーワードですか?

私はC++の初心者です。私はしばしば以下のような条件付きステートメントを見ます:

if 
  statement_0;
else if
  statement_1;

質問:

構文的にelse if単一のキーワードとして?または、実際には以下のような外側のif内のネストされたelseステートメントですか?

if 
  statement_0;
else 
  if
    statement_1;
98
modeller

ドラフトC++標準 セクション2.12キーワード table 4ifelseを個別に使用し、else ifキーワードはありません。 C++ keywordsのよりアクセスしやすいリストを見つけるには、 キーワードに関するcppreferencesセクション にアクセスしてください。

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

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

else ififは、elseに続くstatementです。セクションには次のようにも書かれています。

[...] 選択ステートメント(各サブステートメント、else形式のサブステートメントifstatement)暗黙的にブロックスコープを定義します(3.3)。 selection-statementのサブステートメントがcompound-statementではなく単一のステートメントである場合、元のサブステートメントを含む複合ステートメントに書き換えられたかのようになります。

次の例を提供します。

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 ;
        }
    }
}

注意

また、keywordsidentifiersであることを理解することで、else ifを1つのキーワードにできないことを判断できます。 数字でクラス名を開始できますか? スペースはidentifiersで許可されていないため、else ifを1つにすることはできませんキーワードただし、2つの別個のキーワードにする必要があります。

132
Shafik Yaghmour

構文的には、単一のキーワードではありません。キーワードに空白を含めることはできません。論理的には、else ifのリストを作成するときは、おそらくyoを単一のキーワードと見なして、

if ( c1 ) {
    //  ...
} else if ( c2 ) {
    //  ...
} else if ( c3 ) {
    //  ...
} else if ( c4 ) {
    //  ...
} // ...

コンパイラは文字通りこれを次のように見なします。

if ( c1 ) {
    //  ...
} else {
    if ( c2 ) {
        //  ...
    } else {
        if ( c3 ) {
            //  ...
        } else {
            if ( c4 ) {
                //  ...
            } // ...
        }
    }
}

しかし、両方の形式は同じものになり、最初の形式ははるかに読みやすくなります。

77
James Kanze

いいえそうではありません。
これらは2つのキーワードであり、さらに、2番目の「if」は、最初の「else」ステートメントによって決定されるスコープの「内部」のサブステートメントです。

24
pablo1977

中かっこを使用してスコープを確認できます。

if(X) {
  statement_0;
}
else {
  if(Y) {
    statement_1;
  }  
}

通常、2つの異なるキーワードで実装されます。1つはifで、もう1つはelseです。

17
reindeer

すでに答えたように、そうではありません。これらは2つのキーワードです。互いに続く2つのステートメントの開始です。もう少し明確にするために、C++言語のifおよびelseステートメントを処理するBNF gramarを示します。

 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++文法は this ページから取得します。

10
The Mask

elseifは2つの異なるC++ キーワード =。 ifステートメントの後にオプションのelse if...を続けることができます... elseステートメント。 ifステートメントには、ゼロ以上のelse ifとそれらを含めることができます。 elseの前に来る必要があります。

この中に構文と例を見つけることができます if ... else statement tutorial

1
clever_bassi