Wenn Sie einen Iterator schreiben wollen, schreiben Sie in der RegelVerständnis const
T* operator->() const;
Mein Problem ist das Verständnis dieses „const“ mit Zeigern und Referenzen.
Zum Beispiel können Sie die folgende Struktur schreiben:
struct A{
int* x;
A(int& x0):x{&x0}{}
int* ptr() const {return x;}
int& ref() const {return *x;}
};
Und Sie können es auf diese Weise verwenden:
int x = 10;
const A a{x};
int& r = a.ref();
int* p = a.ptr();
*p = 4;
cout << x << endl; // prints 4
r = 25;
cout << x << endl; // prints 25
Aber warum diese kompiliert und funktioniert richtig (zumindest mit g ++ und Klirren). Warum?
Wie ich definiert
const A a{x};
dieses "a" ist konst. Also, wenn ich
nennenint* p = a.ptr();
Ich rufe ptr() mit einem konstanten Objekt, so dass der interne Zeiger A-> x muss "int * const" sein. Aber ich gebe ein "int *" ohne const zurück. Warum ist das korrekt?
Und was passiert mit der Referenz? Wenn ich A :: ref() mit einem "const A" aufrufe, welchen Typ gibt diese Funktion zurück? So etwas wie "int & const" ??? < --- Ich nehme an, das ist das gleiche wie "int &".
Danke für Ihre Hilfe.
Sie können jederzeit eine konstante Sache kopieren. – molbdnilo