c++ 使用constexpr变量作为case标签

zqry0prt  于 2023-07-01  发布在  其他
关注(0)|答案(1)|浏览(146)

使用constexpr变量作为case标签是否正确。

#include <iostream>

int main() {
    constexpr int x = 5;

    int y = 4;

    switch (y) {
        case x - 1:
            std::cout << "case " << x << std::endl;

            break;

        case 20:
            std::cout << "case 20" << std::endl;

            break;

        default:
            std::cout << "case default" << std::endl;

            break;
    }
}
ss2ws0br

ss2ws0br1#

cppreference表示case值必须是
与转换和整数提升后的条件类型相同类型的常量表达式
这包括constexpr表达式,如constexpr变量,您可以像示例中那样减去1。
在标准中,这是[stmt.switch]
switch语句中的任何语句都可以使用一个或多个case标签进行标记,如下所示:
case constant-expression :
其中常量表达式应当是开关条件的调整类型的转换后的常量表达式。转换后,同一开关中的任何两个情况常数不得具有相同的值。
常量表达式是[expr.const]中的任何内容。
例如,您甚至可以使用constexpr函数调用:

constexpr int caseLabel() {
    return 4;
}
// ...
switch (y) {
    case caseLabel():

相关问题