在语句中使用集合"switch"
Using sets in "switch" statement
我能添加集合而不是数字到"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[支撑。条件应为整型、枚举型,或存在一个到整型或枚举型的非显式转换函数的类类型[…]该常量表达式应为开关条件
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;
如果a
是4
呢?这将引起问题。如果它不使用跳转表,它就不会比if-else
块更有用
相关文章:
- 处理多个异常集合的C++方法
- 给定n个元素的m个集合.在C++中找到出现在最大集合数中的元素
- 如何将ampl中的集合表示为c++中的向量
- 检查值是否在集合p1和p2中,但不在p3中
- 带过滤器的现代迭代c++集合
- 如何将结构插入到集合中并打印集合的成员
- 集合上的输出迭代器:assign和increment迭代器
- 如何将函数集合传递给客户端类,以便将它们当作客户端类本身的成员使用
- 实现一个在集合上迭代的模板函数
- 尝试使用集合函数时出现分段错误
- 当调用switch语句中的函数时(即使函数不包含循环),似乎是永不结束的循环的问题
- 互斥指针的集合
- c++找不到具有相同哈希的无序集合元素
- python集合的C++等价物是什么.计数器
- 如何在C++中递归地按相反顺序打印集合
- 通过switch和static_cast访问多态对象的运行时类型
- Python 集合.计数器,如何避免重复查找
- 如何写向量的无序向量集,即unordered_set<向量<向量<int>>集合?
- 从具有自定义排序的向量创建集合
- 在语句中使用集合"switch"