私の友人のコードを閲覧している間、私はこれに気付くようになりました:
switch(State &state = getState()) {
case Begin: state = Search; break;
// other stuff similar
}
スイッチヘッダーの変数とは何ですか?彼はGCCを使用しているので、これはGCC拡張機能である可能性があります。何か案が?
私の友人のコードを閲覧している間、私はこれに気付くようになりました:
switch(State &state = getState()) {
case Begin: state = Search; break;
// other stuff similar
}
スイッチヘッダーの変数とは何ですか?彼はGCCを使用しているので、これはGCC拡張機能である可能性があります。何か案が?
これは秘密でもGCC拡張でもありません。if
変数は、s、while
s、switch
esなどの条件で宣言できます。例えば:
while (char c = cin.get()) { ... }
また
if (int* something = (int*)malloc(4)) { // but don't use malloc in C++
// ...
}
それらが初期化されたと宣言された後、それらはbool
値に変換され、それらがブロックに評価される場合true
は実行され、それ以外の場合はブロックがスキップされます。それらのスコープは、それらが宣言されている条件を持つ構成のスコープです(そして、の場合if
、スコープはすべてのelse if
およびelse
ブロックにも適用されます)。
C ++ 03規格の§6.4.1では、
選択ステートメントは、いくつかの制御フローの1つを選択します。
selection-statement: if ( condition ) statement if ( condition ) statement else statement switch ( condition ) statement condition: expression type-specifier-seq declarator = assignment-expression
ご覧のとおり、またはtype-specifier-seq declarator = assignment-expression
の条件で許可されます。そして、あなたは「繰り返し構造」のセクションで似たようなものを見つけるでしょう。if
switch
また、switch
esは、積分または型に暗黙的に変換できるクラスの積分またはenum
型またはenum
インスタンスで機能します(§6.4.4)。
switchステートメントで初期化された宣言である条件の値は、整数型または列挙型の場合は宣言された変数の値、それ以外の場合は暗黙的に整数型または列挙型に変換された変数の値です。
私は実際に、「C++の隠された機能」の質問に投稿した回答からこれを知りました。だから私はあなたにそれを思い出させることができてうれしいです:)