我可以在“切换”语句中添加集而不是数字吗?像:
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;
}
等等。
答案 0 :(得分:6)
(编辑以下评论,确认给用户syam)
没有。在C ++中,您只能打开减少到整数的东西。您需要构建一个计算1&lt; 1的整数结果的函数。 50和50&lt; 100等并使用开关(thatFunction(...))。
或者,如果您不需要交换机为您提供的跟随习惯用法(根据您的示例的外观,您不需要),只需使用if
,else 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;
现在如果a
是4
该怎么办?这将导致问题。如果它不使用跳转表,它不会比if-else
块