C++ 在交换机中使用constexp成员函数
为什么我可以在switch中使用constexp非成员函数,但当我使用成员函数时,编译器会说:“y的值在常量表达式中不可用”C++ 在交换机中使用constexp成员函数,c++,c++11,constexpr,C++,C++11,Constexpr,为什么我可以在switch中使用constexp非成员函数,但当我使用成员函数时,编译器会说:“y的值在常量表达式中不可用” 将y声明为常量表达式: constexpr Test y = Test(4); 原因: 虽然,Test::get()已声明constepr对象y未声明。简介 代码的问题在于,标准()要求与标签关联的每个表达式必须是常量表达式 6.4.2p2开关语句[stmt.switch] switch语句中的任何语句都可以使用一个或多个case标签进行标记,如下所示: 大小写常量表
将
y
声明为常量表达式:
constexpr Test y = Test(4);
原因:
虽然,Test::get()
已声明constepr
对象y
未声明。简介
代码的问题在于,标准()要求与标签关联的每个表达式必须是常量表达式
6.4.2p2
开关语句[stmt.switch]
switch语句中的任何语句都可以使用一个或多个case标签进行标记,如下所示:
大小写常量表达式:
其中,常数表达式应为开关条件升级类型的转换常数表达式(5.19)
由于y
不是在常量表达式中声明的,因此在为特定案例标签指定指针时,y.get()
不可用。成员函数是constexpr,但Test
的实例不是,这使得Test::get
的用法成为一个非常量表达式
解决方案 要解决此问题,您需要使用
constexpr
说明符声明y
,以便在您要查找的上下文中使用它,我猜您已经知道如何:
constexpr Test y (4);
constexpr Test y (4);