如何使用const变量初始化类的const成员变量?

时间:2019-04-11 17:06:04

标签: c++ visual-studio class const

我必须从.txt文件中读取行,并希望使用它初始化类的成员。行中的第一个字符始终是数字。

class myClass{

  private:
    const int ID;

  public:
    myClass(const int id){
       this->ID =  id;
    }

};

这样做可以为构造函数提供“对于Kontakt :: ID不提供初始化程序”,对于this->ID = id;来说,“表达式必须是可修改的Ivalue”

2 个答案:

答案 0 :(得分:4)

您必须为此使用member initializer list

myClass(const int id)
    : ID(id) { }

答案 1 :(得分:4)

您必须在member initializer list中初始化const类成员。这是一个完整的示例(请参见online):

class myClass {
  private:
    const int ID;
  public:
    myClass(const int id) : ID(id) {
                         // ^^^^^^
    }

};

int main() {
    myClass x(42);
}

问题在于构造函数主体中的初始化为时已晚,所有类作用域成员将在主体中的代码执行之前尝试进行初始化,并且const类成员变量没有默认的初始化。

如果您确实想要默认的初始化,可以这样做(online示例):

class myClass {
  private:
    const int ID = -42; // <<<
  public:
    myClass() = default; // <<<
    myClass(const int id) : ID(id) {
    }

};

int main() {
    myClass x;
}