[Gelöst] Nicht-Konstante Referenz erzwingen
-
Guten Tag,
ich habe ein Klassentemplate
A
mit folgender Definition:template <typename T,size_t D> class A { std::array<T,D> foo_; public: /* ... *tors, etc ... */ T& operator[](size_t pos); };
Das Problem, das ich habe, liegt in der Definition der Methode
T& A::operator[]()
. Mache ich dort ein simplesreturn foo_[pos];
, so erhalte ich (mit GCC 4.7) eine konstante Referenz und kann auf das Element zwar lesend zugreifen, aber nicht schreiben, es wird also scheinbar auf
const_reference std::array::operator[]( size_t pos ) const
zugegriffen und nicht aufreference std::array::operator[]( size_t pos )
Wie sorge ich dafür, dass ich in diesem Fall einen operator[] mit Schreibzugriff bekomme?
Mit freundlichen Grüßen,
Ki
-
-
cooky451 schrieb:
Tut mir Leid, genau das Gegenteil war das Problem.
Ich hatte einen konstantes A und noch keinen operator[] für konstante Referenzen definiert und darum wollte er nicht.Dennoch danke.
-
Ki schrieb:
Nicht-Konstante Referenz
Sowas existiert nicht. Referenzen sind immer konstant.
Was du meinst, ist eine Referenz auf ein nicht-konstantes Objekt (oder kurz non-const reference).
-
Hallo Nexus,
und jetzt übersetze mal non-const reference ins deutsche
-
Th69 schrieb:
Hallo Nexus,
und jetzt übersetze mal non-const reference ins deutsche
Wenn man es auf deutsch übersetzt (nicht-konstante Referenz), dann lesen es auch alle so, wie man deutsche Sprache eben liest, von links nach rechts. Und das ist eben falsch. Es heißt eben nicht nicht-konstante Referenz, sondern Referenz auf ein nicht-konstantes Objekt. Von rechts nach links lesen. Das ist eben der eine Grund warum man non-const reference sagt (um aufs richtige Lesen hinzuweisen). Der andere Grund ist einfach, dass der C++-Standard diese Schreibweise verwendet.
-
out schrieb:
Wenn man es auf deutsch übersetzt (nicht-konstante Referenz)
Es heisst wortwörtlich übersetzt eben nicht "nicht-konstante Referenz", sondern "Nichtkonstanten-Referenz". Die Nichtkonstante ist das nicht-konstante Objekt.
-
Th69 schrieb:
und jetzt übersetze mal non-const reference ins deutsche
Es heisst "const" und nicht "constant". Wichtiger Unterschied.
Deutsch wäre es also Non-Const-Referenz.
Interessanterweise haben damit sehr viele Leute Probleme, aber bei
const_iterator
ist plötzlich allen klar, dass sich das "const" nicht auf den Iterator, sondern das referenzierte Element bezieht. Bei den Member-Typenconst_pointer
undconst_reference
ist das nicht anders.