我可以在“switch”语句中添加集合而不是数字吗?喜欢:
switch(number)
{
case 1<50: //if number is between 1 and 50
{
blah;
break;
}
case 50<100: //if number is between 50 and 100
{
blah;
break;
}
等等。
我可以在“switch”语句中添加集合而不是数字吗?喜欢:
switch(number)
{
case 1<50: //if number is between 1 and 50
{
blah;
break;
}
case 50<100: //if number is between 50 and 100
{
blah;
break;
}
等等。
(编辑以下评论,致谢用户 syam)
不可以。在 C++ 中,您只能打开减少为整数的东西。您需要构建一个函数来计算 1 < 50 和 50 < 100 等的积分结果并使用 switch(thatFunction(...))。
或者,如果您不需要 switch 为您提供的后续惯用语(从您的示例看来,您不需要),只需使用if
, else if
, else
.
摘自以下评论: 6.4.2-2 [stmt.switch] 条件应为整数类型、枚举类型或存在单个非显式转换函数到整数或枚举类型的类类型 [... ] 常量表达式应该是转换条件的提升类型的转换常量表达式 (5.19)
1 < 50
是一个布尔表达式,它的编译时值为true
,因此成为1
整数上下文。所以你最终case
在你的switch
. 以高警告级别编译 - 你的编译器肯定会抱怨。
可悲的是没有。您可以对一小组离散值使用 fall-through:
case 1:
case 2:
blah;
break;
但对于大范围,唯一明智的选择是if...else
.
对我来说,这适用于我的 g++ (GCC) 4.7.2 20121109
#include <iostream>
using namespace std;
int main() {
switch(6) {
case 1 ... 5:
cout << "Between 1 and 5" << endl;
break;
case 6 ... 10:
cout << "Between 6 and 10" << endl;
break;
}
}
感谢您在评论中指出这是GCC 的扩展
你不能在 C++ 中做到这一点。case
switch 必须是一个可以转换为int
.
条件语句不允许用作 case 语句,因此您可以选择使用 if / else 语句。