C++ switch语句可以使用变量吗?

C++ switch语句可以使用变量吗?,c++,switch-statement,C++,Switch Statement,下面是声明两个int变量并尝试在switch语句中使用它们的代码。这是C++中的合法操作吗?若否,原因为何 int i = 0; int x = 3; switch (i) { case x: // stuff break; case 0: // other stuff break; } 大小写标签必须是一个整型常量表达式,因此您的示例无效。但是如果x更改为: const int x = 3; 那么它是有效的 switch语句可以使用变量吗

下面是声明两个int变量并尝试在switch语句中使用它们的代码。这是C++中的合法操作吗?若否,原因为何

int i = 0;
int x = 3;
switch (i)
{
    case x:
    // stuff
    break;

    case 0:
    // other stuff
    break;
}

大小写
标签必须是一个整型常量表达式,因此您的示例无效。但是如果
x
更改为:

const int x = 3;
那么它是有效的

switch语句可以使用变量吗

对。这很好

int i = 0;
switch (i) {
}
但是,
case
语句不能使用变量(它们必须是常量)


您可以为
开关
-so
i
或甚至
i*2
等提供任何您喜欢的表达式。都可以,但是
大小写
值必须是编译时常量表达式,因此您的
x
是不合法的,但是0是合法的。如果在开关大小写之前将x重新指定为0会发生什么情况?“大小写”不进行任何由指针或变量指定的内存引用。当您说:case x:这告诉switch语句我有一个名为“x”的值,并且我希望输入的值是x,或者更确切地说是字符串“x”。它只需要字符串、int、float或double等任何值,并且将在不引用内存位置的情况下对其进行处理。@Juniar“需要字符串、int、float或double等任何值”-
开关
仅适用于整数类型。。。i、 e.
bool
char
,[
short
/
long
][
unsigned
]
int
enum
,或可以在上下文中隐式转换为任何类型的字符串的类,
float
,“TonyD”,所以你仍然可以发出一个字符串值,如颜色:红色、蓝色、绿色等等,但是只有在转换语句之前有一个枚举声明。但是在C++中,变量可以是常量:-)。要求case语句计算为一个整型常量表达式。因此,如果
i
被声明为
const
,那么像
情况i+3:
这样的事情也是有效的。或者在C++11中,
case g():
,前提是定义了
g
case 0:
  // first
  break;
case 1:
  // second
  break;
default:
  // other