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

时间:2013-06-03 00:52:23

标签: c++ reference

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

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

template<class T>
class AVLNode {

private:
       T & data;
public:
       AVLNode(T & newData) {
            data = newData;
        }
};

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

error: uninitialized reference member ‘AVLNode<int>::data’ [-fpermissive]

我没有得到这个,我在构造类时立即初始化引用,因此引用未初始化时应该没有问题吗?

1 个答案:

答案 0 :(得分:15)

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

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

}

您可能会发现此帖子很有用:reference member variable must be initialized at constructor initialization list。在编写类的构造函数时,您可能还需要了解 initialization assignment 之间的区别。

引自C ++ Primer第455页:

  

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