这是我的代码:
bool Character::keyPress(char c)
{
switch(c)
{
case up_key:
move(0, -1);
break;
case down_key:
move(0, 1);
break;
case left_key:
move(-1, 0);
break;
case right_key:
move(1,0);
break;
default:
return false;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
并且编译器抱怨:
error C2051: case expression not constant
error C2051: case expression not constant
error C2051: case expression not constant
error C2051: case expression not constant
Run Code Online (Sandbox Code Playgroud)
在我的头文件中,我有:
protected:
char up_key;
char down_key;
char right_key;
char left_key;
Run Code Online (Sandbox Code Playgroud)
我正在使用Visual C++ 2008.
下面是声明两个int变量并尝试在switch语句中使用它们的代码.这是C++中的合法操作吗?如果没有,为什么不呢?
int i = 0;
int x = 3;
switch (i)
{
case x:
// stuff
break;
case 0:
// other stuff
break;
}
Run Code Online (Sandbox Code Playgroud) C++中的switch语句必须用常量编写的原因是什么?
我们来看看下面的代码:
switch(variable)
{
case 1:
case 2:
case 3:
case 4:
//Code 1
break;
case 5:
case 6:
case 7:
case 8:
//Code 2
break;
default:
//Code 3
break;
}
Run Code Online (Sandbox Code Playgroud)
在其他语言中,例如PAWN(C-Like脚本语言),我可以这样写下这段代码:
switch(variable)
{
case 1 .. 4:
//Code 1
break;
case 5 .. 8:
//Code 2
break;
default:
//Code 3
break;
}
Run Code Online (Sandbox Code Playgroud)
从石器时代开始,C++ switch语句是洙的原因是什么?(更不用说我们不能使用变量了.)
即使经过这么多年的这么多变化和更新......
在我意识到语句需要是常量之前,我想在switch语句中使用宏函数.示例(不编译):
#define BAND_FIELD1(B) (10 * B + 1)
...
#define BAND_FIELD7(B) (10 * B + 7)
int B = myField % 10;
switch (myField) {
case BAND_FIELD1(B):
variable1[B] = 123;
break;
case BAND_FIELD7(B):
variable7[B] = 321;
break;
...
}
Run Code Online (Sandbox Code Playgroud)
我宁愿使用if .. else:
if (myField == BAND_FIELD1(B)
variable1[B] = 123;
else if (myField == BAND_FIELD7(B)
variable7[B] = 321;
Run Code Online (Sandbox Code Playgroud)
为什么C++ switch语句仅限于常量表达式?