Als Selbst Übung, ich habe diesen einfachen Code geschrieben:Muss ein Referenztyp in der Initialisierungsliste des Konstruktors initialisiert werden?
#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;
}
ich einen Kompilierungsfehler bekam, die sagt:
error C2758: 'Array<T>::m_anchor' : must be initialized in constructor base/member initializer list
Es ist nie passiert ist, was mich dies zu fragen bringt Frage:
Muss ein Klassenmitglied-Referenztyp in der Errichterinitialisierungsliste initialisiert werden?
Wenn ja, warum? Ist das irgendwie damit zu tun, dass ein Referenztyp niemals neu zugeordnet werden kann?
Gibt es mehr Typen, die in der Initialisierungsliste des Konstruktors initialisiert werden müssen?
Ich schäme mich wirklich, das zu fragen, aber ein Referenztyp hat keinen Zuweisungsoperator? – Billie
@ user1798362 nein, ein Verweis es nur ein Alias für etwas anderes. Wenn Sie einer Referenz "zuweisen", ordnen Sie sie wirklich dem Objekt zu, auf das sie sich bezieht. – juanchopanza
Wie ich dachte. Vielen Dank! – Billie