使用constexpr变量作为case标签是否符合C++语法规范?
在C++中使用constexpr变量作为switch的case标签是否合法?
完全合法,只要由constexpr变量构成的表达式是编译期可求值的常量表达式,就可以作为switch语句的case标签。
原因说明
switch的case标签要求必须是整型/枚举类型的常量表达式——编译器需要在编译阶段就能确定标签的具体值,才能生成对应的分支跳转指令。而constexpr变量的核心特性就是在编译期确定值,因此用它(或它参与的简单算术表达式,比如示例里的x - 1)作为case标签完全符合C++标准的要求。
结合示例代码分析
你提供的代码里constexpr int x = 5是编译期确定的常量,x - 1的结果在编译时就能算出是4,所以case x - 1等价于直接写case 4。当y=4时,程序会进入第一个分支,输出case 5。这段代码在C++11及以后的标准下可以正常编译运行。
注意事项
如果constexpr变量的值依赖于运行期才能确定的内容(比如赋值给它的是一个非constexpr函数的返回值),那它参与的表达式就不再是编译期常量,此时不能作为case标签——编译器会直接报错。
内容的提问来源于stack exchange,提问作者Harry
相关产品推荐
相关产品推荐

