在语句中使用集合"switch"

Using sets in "switch" statement

本文关键字:集合 switch 语句      更新时间:2023-10-16

我能添加集合而不是数字到"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 <使用开关(thatFunction(…))>

或者,如果您不需要开关提供的后续习惯用法(从示例的外观来看,您不需要),则只需使用if, else if, else

摘自以下注释: 6.4.2-2[支撑。条件应为整型、枚举型,或存在一个到整型或枚举型的非显式转换函数的类类型[…]该常量表达式应为开关条件

的提升类型的转换常量表达式(5.19)。

1 < 50是一个布尔表达式,它获得true编译时值,因此在整数上下文中变为1。所以你在switch中得到两个相同的case。使用高警告级别编译——你的编译器肯定会报错。

很遗憾没有。您可以对一小组离散值使用透降:

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的扩展

条件语句不允许作为case语句,因此您的选择是使用if/else语句。

在c++中不能这样做。

case必须为可转换为int的常量。

这里讨论得很好。

当您必须在许多可能的条件下使用单个变量时,switch语句非常有用。通过使用跳转表,switch语句比if-else块工作得更快。它在制作表时需要常数整数。不允许表达式求值为固定值的原因是为了避免歧义。

case 1+a;
break;
case 5;
break;

如果a4呢?这将引起问题。如果它不使用跳转表,它就不会比if-else块更有用