/ / switchステートメントでメンバー変数を使用する方法は? -C ++、スイッチ文

switch文でメンバ変数を使用するには? - c ++、switch-statement

として変数を使用してみたとき 場合 switchステートメント内では、プログラムはコンパイルされません。

class Foo{
public:
// outside the function
const int val = 1;

void bar(){
switch (1){
case val:
// ...
break;
default:
// ...
break;
}

}
};

gccはこのエラーを私に与えます:

定数式での「this」の使用

しかし、変数をローカル変数として宣言すると、うまくコンパイルされます

class Foo{
public:
void bar(){
// inside the function
const int val = 1;
switch (1){
case val:
// ...
break;
default:
// ...
break;
}

}
};

なぜこれが起こり、switchステートメントでメンバー変数を使用するにはどうすればよいですか?

回答:

回答№1の場合は3

C ++スイッチはコンパイル時の構成要素であり、その理由はあまりありません。まさにそうです。そのため、すべてのケースラベルは定数式、つまりコンパイル時定数でなければなりません。

あなたの例の中では、 val は不変であり、定数式ではないため、エラーになります。修正するには、次のいずれかを使用します static const または static constexpr

class Foo
{
static const int val = 1;      // this
static constexpr int val = 1;  // or this
};

回答№2については2

として宣言する static const。それは実際には変数(定数または非定数)であってはならず、コンパイル時の定数であるべきです。