私はC++の初心者です。私はしばしば以下のような条件付きステートメントを見ます:
if
statement_0;
else if
statement_1;
質問:
構文的に、else if
単一のキーワードとして?または、実際には以下のような外側のif
内のネストされたelse
ステートメントですか?
if
statement_0;
else
if
statement_1;
ドラフトC++標準 セクション2.12
キーワード table 4
はif
とelse
を個別に使用し、else if
キーワードはありません。 C++ keywordsのよりアクセスしやすいリストを見つけるには、 キーワードに関するcppreferencesセクション にアクセスしてください。
セクション6.4
の文法もこれを明確にします。
selection-statement:
if ( condition ) statement
if ( condition ) statement else statement
else if
のif
は、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 ;
}
}
}
注意
また、keywordsがidentifiersであることを理解することで、else if
を1つのキーワードにできないことを判断できます。 数字でクラス名を開始できますか? スペースはidentifiersで許可されていないため、else if
を1つにすることはできませんキーワードただし、2つの別個のキーワードにする必要があります。
構文的には、単一のキーワードではありません。キーワードに空白を含めることはできません。論理的には、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 ) {
// ...
} // ...
}
}
}
しかし、両方の形式は同じものになり、最初の形式ははるかに読みやすくなります。
いいえそうではありません。
これらは2つのキーワードであり、さらに、2番目の「if」は、最初の「else」ステートメントによって決定されるスコープの「内部」のサブステートメントです。
中かっこを使用してスコープを確認できます。
if(X) {
statement_0;
}
else {
if(Y) {
statement_1;
}
}
通常、2つの異なるキーワードで実装されます。1つはifで、もう1つはelseです。
すでに答えたように、そうではありません。これらは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 ページから取得します。
elseとifは2つの異なるC++ キーワード =。 ifステートメントの後にオプションのelse if...を続けることができます... elseステートメント。 ifステートメントには、ゼロ以上のelse ifとそれらを含めることができます。 elseの前に来る必要があります。
この中に構文と例を見つけることができます if ... else statement tutorial