C++开关语句不允许我使用多个"or"?什么?

C++ switch statement doesn't let me use more than one "or"? What?

本文关键字:什么 or 语句 开关 不允许 允许我 C++      更新时间:2023-10-16

这真的很奇怪。因此,我有一个简单的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"answers"D"/"D"给出了三个错误,每个错误都表示以下内容:

IntelliSense: case label value has already appeared in this switch 

它不会给我这个"A"/"A"的错误——如果我去掉了情况A,它允许情况B,但不允许下面的情况。我想不出有什么理由可以对第一种"或"情况进行处理,但对以下情况感到不安。

上下文:写一个容器类,这个代码在主函数之外,但我认为这与它无关

有什么想法吗?如果这在C++中是不允许的,那么有没有更好的方法可以为一种情况包含多个选项?

||是逻辑OR。它的操作数被转换为bool——零被转换为false,所有其他操作数被转化为true。结果是truefalse,然后分别转换为10。因此,您的所有四个case都等效于case 1:,编译器会抱怨,因为在同一个switch语句中不能有两个值相同的case常量。

你想要的是:

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

这利用了跌倒行为。

case 'A' || 'a':->情况1:

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

因此,不可能决定打哪一个电话。