作为自我锻炼,我写了这个简单的代码:
#include <iostream>
int gIndex = 3;
template <class T> class Array
{
public:
explicit Array(int size);
T& operator[](int i) { return m_data[i]; }
T operator[](int i) const { return m_data[i]; }
T getAnchorPoint() const { return m_data[m_anchor]; }
private:
T* m_data;
int m_size;
int& m_anchor;
};
template <class T> Array<T>::Array(int size) : m_size(size), m_data(new T[size])
{
memset(m_data, 0, size*sizeof(T));
m_anchor = gIndex;
}
int main()
{
Array<double> a(10);
return 0;
}
我得到一个编译错误,它说:
error C2758: 'Array<T>::m_anchor' : must be initialized in constructor base/member initializer list
它从来没有发生过,是什么让我问这个问题:
必须在构造函数初始化列表中初始化任何类成员引用类型吗?
如果是这样,为什么?这是否与永远无法重新分配引用类型的事实有关?
构造函数初始化列表中是否还有更多必须初始化的类型?