在“switch”语句中使用sets

时间:2013-05-23 12:41:49

标签: c++ set switch-statement

我可以在“切换”语句中添加集而不是数字吗?像:

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;
 }

等等。

7 个答案:

答案 0 :(得分:6)

(编辑以下评论,确认给用户syam)

没有。在C ++中,您只能打开减少到整数的东西。您需要构建一个计算1&lt; 1的整数结果的函数。 50和50&lt; 100等并使用开关(thatFunction(...))。

或者,如果您不需要交换机为您提供的跟随习惯用法(根据您的示例的外观,您不需要),只需使用ifelse if,{ {1}}。

从以下评论中摘录: 6.4.2-2 [stmt.switch]条件应为整数类型,枚举类型或类类型,其中存在单个非显式转换函数为整数或枚举类型[...] constant-expression应该是切换条件的提升类型的转换常量表达式(5.19)

答案 1 :(得分:2)

1 < 50是一个布尔表达式,其编译时值为true,因此在整数上下文中变为1。因此,您最终会在case中找到两个相同的switch。编译具有高警告级别 - 您的编译器肯定会抱怨。

答案 2 :(得分:1)

可悲的是没有。您可以对一小组离散值使用fall-through:

case 1:
case 2:
    blah;
    break;

但对于大范围,唯一明智的选择是if...else

答案 3 :(得分:1)

对我来说,这适用于我的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's extenstion

答案 4 :(得分:0)

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

答案 5 :(得分:0)

你不能用C ++做到这一点。 case个开关必须是可以转换为int的常量。

答案 6 :(得分:0)

很好地讨论了here

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

case 1+a;

break;

case 5;

break;

现在如果a4该怎么办?这将导致问题。如果它不使用跳转表,它不会比if-else

更有用