C++ switch语句可以使用变量吗?
下面是声明两个int变量并尝试在switch语句中使用它们的代码。这是C++中的合法操作吗?若否,原因为何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 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
语句不能使用变量(它们必须是常量)
您可以为
开关-soi
或甚至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