尝试使用c ++ 11标准编译以下内容失败,并显示错误:
class test{
public:
int getId(){
return id;
}
constexpr int id = 5;
};
non-static data member cannot be constexpr;
。
我认为发生上述情况是因为在编译时类test
还不存在。
但是,在constexpr int id = 5;
下定义getId(){
可以正常编译。
函数getId
在编译期间是否可用?如果班级还不存在怎么办?
示例2:
class test{
public:
int getId(){
constexpr int id = 5;
return id;
}
};
答案 0 :(得分:0)
是的,该函数在编译时可用。您可以通过使其成为constexpr
函数来确认这一点,如下所示。您可以改为声明函数constexpr static
,因为它不需要访问任何非静态成员。
class test {
public:
constexpr int getId() {
constexpr int id = 5;
return id;
}
};