Har*_*rry 1 c++ switch-statement constexpr c++17
使用 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;
}
}
Run Code Online (Sandbox Code Playgroud)
这是。cppreference表示 case 值必须是
转换和整数提升后与条件类型相同类型的常量表达式
这包括像变量constexpr这样的表达式constexpr,您可以像示例中那样减去 1。
在标准中,那就是[stmt.switch]:
switch 语句中的任何语句都可以使用一个或多个 case 标签进行标记,如下所示:
case constant-expression :
其中常量表达式应为 switch 条件的调整类型的转换常量表达式。同一开关中的两个 case 常量在转换后不得具有相同的值。
常量表达式是 中的任何内容[expr.const]。
例如,您甚至可以使用constexpr函数调用:
constexpr int caseLabel() {
return 4;
}
// ...
switch (y) {
case caseLabel():
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
160 次 |
| 最近记录: |