switch文の次の2つのコードスニペットの違いは何ですか?C++のswitch文
どちらが優れていますか?いつ両者を使うことができますか?
ケース1:
int i = 10;
switch(i)
{
//case
}
をケース2:第2のケースで
switch(int i = 10, i)
{
//case
}
、C++ 17は、switchステートメント内の変数を初期化することを許可。
switch文の次の2つのコードスニペットの違いは何ですか?C++のswitch文
どちらが優れていますか?いつ両者を使うことができますか?
ケース1:
int i = 10;
switch(i)
{
//case
}
をケース2:第2のケースで
switch(int i = 10, i)
{
//case
}
、C++ 17は、switchステートメント内の変数を初期化することを許可。
最初のバージョンではi
はswitch
のスコープの末尾に存在します。後でi
が必要な場合は、それを使用することができます。コンパイラがC++を知っていれば、2番目のバージョンを使用できます。
C++ 17より前のsecondeの場合は無効ですか?つまり、C++ 17以降は有効ですか? – songyuanyao
@songyuanyao:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0305r1.html構文は 'switch(int i = 10; i)'と表示されます。カンマではなくセミコロンを使用します。 – Hasturkun
@Hasturkun説明のためにありがとう。したがって、C++ 17の 'switch(int i = 10; i)'が有効になるからです。とにかく '、'とは関係ありません。私はちょうど質問のポイント(そしてこの答え)を得ることができません。 – songyuanyao
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
}
に適用される場合のい2コンパイル? https://wandbox.org/permlink/DyHw98R9ErY0h5Kx – songyuanyao
あなたは 'switch(int i = 10; i)'を意味します。 – JHBonarius