在类构造函数中初始化引用变量

Eth*_*han 6 c++ reference

所以我仍然在这里弄清楚C++引用的语义.

我有一个类作为成员的引用,我在构造函数中初始化引用.

template<class T>
class AVLNode {

private:
       T & data;
public:
       AVLNode(T & newData) {
            data = newData;
        }
};
Run Code Online (Sandbox Code Playgroud)

但是我在构造函数行上得到了这个错误:

error: uninitialized reference member ‘AVLNode<int>::data’ [-fpermissive]
Run Code Online (Sandbox Code Playgroud)

我没有得到这个,我在构建类时立即初始化引用,所以引用未初始化的问题应该没有问题吗?

tao*_*ocp 15

由于data是引用,您必须在构造函数初始化程序中初始化它:

AVLNode(T & newData): data(newData) {

}
Run Code Online (Sandbox Code Playgroud)

您可能会发现此帖子很有用:必须在构造函数初始化列表中初始化引用成员变量.您可能还需要明白之间的差别initialization,并assignment当你写一个类的构造函数.

引自C++ Primer pp455:

必须在构造函数初始值设定项中初始化某些成员.对于此类成员,在构造函数体中分配它们不起作用.不具有默认构造函数的类类型的成员以及const或引用类型的成员必须在构造函数初始值设定项中初始化,而不管其类型如何.

  • 如果它实际上没有提到成员初始化列表,则刻录该书. (5认同)