成员变量与成员函数的初始化

时间:2019-12-08 21:08:22

标签: c++

尝试使用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;
 }
};

1 个答案:

答案 0 :(得分:0)

是的,该函数在编译时可用。您可以通过使其成为constexpr函数来确认这一点,如下所示。您可以改为声明函数constexpr static,因为它不需要访问任何非静态成员。

class test {
public:
    constexpr int getId() {
        constexpr int id = 5;
        return id;
    }
};