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