2017-04-19 15 views
1

switch文の次の2つのコードスニペットの違いは何ですか?C++のswitch文

どちらが優れていますか?いつ両者を使うことができますか?

ケース1:

int i = 10; 
switch(i) 
{ 
//case 
} 

をケース2:第2のケースで

switch(int i = 10, i) 
{ 
//case 
} 

、C++ 17は、switchステートメント内の変数を初期化することを許可。

+0

に適用される場合のい2コンパイル? https://wandbox.org/permlink/DyHw98R9ErY0h5Kx – songyuanyao

+1

あなたは 'switch(int i = 10; i)'を意味します。 – JHBonarius

答えて

5

最初のバージョンではiswitchのスコープの末尾に存在します。後でiが必要な場合は、それを使用することができます。コンパイラがC++を知っていれば、2番目のバージョンを使用できます。

+1

C++ 17より前のsecondeの場合は無効ですか?つまり、C++ 17以降は有効ですか? – songyuanyao

+0

@songyuanyao:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0305r1.html構文は 'switch(int i = 10; i)'と表示されます。カンマではなくセミコロンを使用します。 – Hasturkun

+3

@Hasturkun説明のためにありがとう。したがって、C++ 17の 'switch(int i = 10; i)'が有効になるからです。とにかく '、'とは関係ありません。私はちょうど質問のポイント(そしてこの答え)を得ることができません。 – songyuanyao

3

switch (int i = 42; i)はC++ 17であり、スイッチにiの範囲を制限するであろう、それはとほとんど同等であろう:

// Code before switch 
{ // Additional scope 
    int i = 42; 
    switch (i) { 
    // case... 
    } 
} 
// Code after switch 

またif

if (int i = 42; i == foo()) { 
    // Can use i 
} else { 
    // Can use i 
}