として変数を使用してみたとき 場合 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の場合は3C ++スイッチはコンパイル時の構成要素であり、その理由はあまりありません。まさにそうです。そのため、すべてのケースラベルは定数式、つまりコンパイル時定数でなければなりません。
あなたの例の中では、 val
は不変であり、定数式ではないため、エラーになります。修正するには、次のいずれかを使用します static const
または static constexpr
class Foo
{
static const int val = 1; // this
static constexpr int val = 1; // or this
};
回答№2については2
として宣言する static const
。それは実際には変数(定数または非定数)であってはならず、コンパイル時の定数であるべきです。