C ++ switch语句不允许我使用多个“或”?什么?

时间:2014-09-07 03:52:21

标签: c++ visual-studio-2013 switch-statement

这真的很奇怪。所以我有这个简单的switch-case语句,如果用户键入一个大写字母的大写或小写版本,它应该执行操作:

switch (choice)
{
case 'A' || 'a':
    cout << "hello"; break;
case 'B' || 'b':
    cout << "hello"; break; 
case 'C' || 'c': 
    cout << "hello"; break;
case 'D' || 'd': 
    cout << "hello"; break; 
}

MS Visual Studio给出了三个错误:“B”/“b”,“C”/“c”和“D”/“d”,每个都说如下:

IntelliSense: case label value has already appeared in this switch 

它没有给我这个'A'/'a'的错误 - 如果我摆脱了案例A,它允许案例B而不是以下案例。我想不出为什么第一个“或”案件应该没问题的任何理由,但在下列情况下会感到不安。

上下文:编写容器类,这段代码在main函数之外,但我认为这与它没有任何关系。

有什么想法?如果在C ++中不允许这样做,是否有更好的方法为一个案例包含多个选项?

2 个答案:

答案 0 :(得分:7)

||是符合逻辑的OR。其操作数转换为bool - 零到false,其他所有为true。结果为truefalse,然后分别转换为10。因此,所有四种情况都等同于case 1:,并且编译器会抱怨,因为在同一switch语句中不能有两个具有相同值的case常量。

你想要的是:

case 'A':
case 'a':
    cout << "hello"; break;

利用了堕落行为。

答案 1 :(得分:1)

case 'A' || 'a': - &gt;案例1:

逻辑运算符的输出可以是true(1)或false(0),因此编译器将具有多个具有0&1和0的开关情况。

因此无法确定要调用的案例。