我可以在switch语句中使用相等运算符吗?

时间:2019-07-12 06:15:45

标签: c++

我正在尝试在!=语句中使用==switch之类的运算符,但是在完成所有测试后,我找不到解决方法无需使用if语句。

我尝试将运算符放在case之前和之后的值。

这是我尝试过的:

int main(){
    int value = 12;
    switch(value){
        case != 12:
            cout << "Inequal \n";
            break;
        default:
            cout << "The value is 12 \n";
    }
}

3 个答案:

答案 0 :(得分:7)

听起来您正在尝试使用case标签中的相等运算符比较某种变量。您只能在case关键字和:之间放置一个常量表达式。参见:https://en.cppreference.com/w/cpp/language/switch

  

attr(可选)case constant_expression : statement

此外,以下约束也适用:

  

constant_expression-与转化和积分提升后的条件类型相同的常量表达式

由于相等运算符的结果为布尔值,所以即使它是常量表达式,也将要求switch部分内的类型也为布尔值。您不能为此使用等于运算符,除非将它们用作常量表达式,并且开关的类型为布尔值。

答案 1 :(得分:2)

不。 switch语句中的case语句需要是编译时间常数。如果需要基于运行时结果进行切换,则需要使用if / else。

答案 2 :(得分:1)

您不能在case语句中使用运算符,只能使用按原样与switch条件进行比较的常量。

但是,对于所显示的特定示例,您可以稍微调整代码以实现所需的结果:

int main(){
    int value = 12;
    switch(value){
        case 12:
            cout << "The value is 12 \n";
            break;
        default:
            cout << "Inequal \n";
    }
}

但这并不比简单的if/else好:

int main(){
    int value = 12;
    if (value == 12) {
        cout << "The value is 12 \n";
    } else {
        cout << "Inequal \n";
    }
}
int main(){
    int value = 12;
    if (value != 12) {
        cout << "Inequal \n";
    } else {
        cout << "The value is 12 \n";
    }
}