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

0 c++ switch-statement visual-studio-2013

这真的很奇怪.所以我有这个简单的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; 
}
Run Code Online (Sandbox Code Playgroud)

对于案例'B'/'b','C'/'c'和'D'/'d',MS Visual Studio给出了三个错误,每个错误都说明如下:

IntelliSense: case label value has already appeared in this switch 
Run Code Online (Sandbox Code Playgroud)

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

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

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

T.C*_*.C. 7

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

你想要的是:

case 'A':
case 'a':
    cout << "hello"; break;
Run Code Online (Sandbox Code Playgroud)

它利用了坠落行为.