Warum hat eine Klasse mit Referenz-Member keinen Default-operator= ?
-
Hallo zusammen,
warum hat eine Klasse mit Referenz-Member keinen Default-operator= ?
class A { }; class B { public: B( A& p_a ): m_a( p_a ) { } private: A& m_a; }; int main() { A a0; A a1; B b0( a0 ); B b1( a1 ); b0 = b1; }
-
Weil Referenzen dort gebunden werden müssen, wo man sie definiert und sie sich danach nicht mehr ändern lassen.
-
Hallo Tachyon,
Tachyon schrieb:
Weil Referenzen dort gebunden werden müssen, wo man sie definiert und sie sich danach nicht mehr ändern lassen.
man muss Referenzen initialisieren, wo sie definiert werden. Aber warum soll man sie nicht ändern dürfen???
int main() { int i0 = 1; int i1 = 2; int& ri = i0; std::cout << ri << std::endl; ri = i1; std::cout << ri << std::endl; }
-
void* schrieb:
Aber warum soll man sie nicht ändern dürfen?
Wer redet von dürfen? Können!
int i0 = 1; int i1 = 2; int& ri = i0; ri = i1;Hier wird nicht ri, sondern i0 (die Variable, an die ri bei der Initialisierung gebunden wurde) verändert.
-
Du hast den Wert von i0 geändert, nicht den Fakt, dass ri an i0 gebunden ist.
edit: Zu langsam.
-
void* schrieb:
...Aber warum soll man sie nicht ändern dürfen???...
Referenzen sind theoretisch "nicht vorhanden", sondern nur ein anderer Name für die daran gebundene Variable. Was der Compiler tatsächlich daraus macht ist vom Compiler und seinen Optimierungen abhängig.
Wenn du eine nachträgliche Änderung haben willst, musst du mit Zeigern arbeiten.
(Falls du aus der Java- oder C#-Welt kommst: Dort entsprechen Referenzen intern im wesentlichen den C++ Zeigern, eine Entsprechung für C++ Referenzen gibt es dort nicht).
-
void* schrieb:
warum hat eine Klasse mit Referenz-Member keinen Default-operator= ?
Was soll der denn machen? Welche Regel macht da in allen Fällen Sinn? -> Keine.
-
Thx @all!
Jetzt stand ich aber gewaltig auf dem Schlauch! Zeit fürs Wochenende!