所以我仍然在这里弄清楚C ++引用的语义。
我有一个作为成员引用的类,我在构造函数中初始化引用。
template<class T>
class AVLNode {
private:
T & data;
public:
AVLNode(T & newData) {
data = newData;
}
};
但是我在构造函数行上遇到了这个错误:
error: uninitialized reference member ‘AVLNode<int>::data’ [-fpermissive]
我没有得到这个,我在构造类时立即初始化引用,因此引用未初始化时应该没有问题吗?
答案 0 :(得分:15)
由于data
是引用,因此必须在构造函数初始化程序中初始化它:
AVLNode(T & newData): data(newData) {
}
您可能会发现此帖子很有用:reference member variable must be initialized at constructor initialization list。在编写类的构造函数时,您可能还需要了解 initialization
和 assignment
之间的区别。
引自C ++ Primer第455页:
必须在构造函数初始值设定项中初始化某些成员。对于此类成员,在构造函数体中分配它们不起作用。不具有默认构造函数的类类型的成员以及 const或引用类型的成员必须在构造函数初始化程序中初始化,而不管类型如何。