Hoffe ihr könnt mir da weiterhelfen

LG Glocke
Die Grundregel lautet wie folgt:Glocke hat geschrieben:Hiho, ich bin im Wiki http://www.proggen.org/doku.php?id=cpp:ref:start über Referenzen gestolpert. Jetzt stellt sich mir die Frage, wann ich Zeiger und wann ich Referenzen verwenden soll.
Nein. Im Assemblercode wirst du nicht mehr zwischen Zeiger und referenzen unterscheiden können.Glocke hat geschrieben:Unterscheiden sich Zeiger und Referenzen bezüglich der Zugriffsgeschwindigkeit?
Ich kann fat-lobytes Comment nur unterschreiben und vielleicht noch so ergänzen:Glocke hat geschrieben:Hiho, ich bin im Wiki http://www.proggen.org/doku.php?id=cpp:ref:start über Referenzen gestolpert. Jetzt stellt sich mir die Frage, wann ich Zeiger und wann ich Referenzen verwenden soll. Unterscheiden sich Zeiger und Referenzen bezüglich der Zugriffsgeschwindigkeit?
Bisher habe ich gar keine Referenzen benutzt. Heißt das ich kann das jetzt einfach auf Referenzen umbauen?fat-lobyte hat geschrieben:Die Grundregel lautet wie folgt:
Verwende überall wo du kannst Referenzen.
Was ist denn dieses "mehr" der Pointer gegenüber den Referenzen? Du meinst damit sicher nicht nur dieses "kann-NULL-sein"Xin hat geschrieben:Mit einem Pointer kannst Du mehr machen als mit einer Referenz - wenn Du Du das nicht brauchst, verwende auch wirklich eine Referenz, dann kannst Du dieses Mehr auch nicht versehentlich machen und verhinderst so Fehler.
Schau Dir vorher noch 'Const-Correctness' an und bau dann wenn möglich auf "const &" um.Glocke hat geschrieben:Bisher habe ich gar keine Referenzen benutzt. Heißt das ich kann das jetzt einfach auf Referenzen umbauen?fat-lobyte hat geschrieben:Die Grundregel lautet wie folgt:
Verwende überall wo du kannst Referenzen.
Nein, fat-lobyte hat das mit dem dynamic_cast ja bereits gesagt, aber den sollte man hoffentlich in Deinen Quelltexten auch nicht finden.Glocke hat geschrieben:Was ist denn dieses "mehr" der Pointer gegenüber den Referenzen? Du meinst damit sicher nicht nur dieses "kann-NULL-sein"Xin hat geschrieben:Mit einem Pointer kannst Du mehr machen als mit einer Referenz - wenn Du Du das nicht brauchst, verwende auch wirklich eine Referenz, dann kannst Du dieses Mehr auch nicht versehentlich machen und verhinderst so Fehler.
Code: Alles auswählen
int a = 1;
int b = 2;
int & ref = a; // <- muss sofort initialisiert werden
ref = b; // a wird zu 2, aber ref referenziert unverändert auf a.
VermerktXin hat geschrieben:Schau Dir vorher noch 'Const-Correctness' an und bau dann wenn möglich auf "const &" um.
Es ist wirklich einfach - meistens. Eben da, wo Du mit Referenzen arbeitest, ansonsten müssen es halt Zeiger bleiben.
Gibts bei mir gar nichtXin hat geschrieben:Nein, fat-lobyte hat das mit dem dynamic_cast ja bereits gesagt, aber den sollte man hoffentlich in Deinen Quelltexten auch nicht finden.
KlarXin hat geschrieben:C-Strings: char const * string solltest Du nicht in char const & wandeln. Hier wird ein Array gemeint und das sollte auch durch den Zeiger (oder []) ausgedrückt werden. Mit einem Array kannst Du den Array-Operator verwenden: string[0], das geht mit einer Referenz nicht. Und Pointer-Arithmetik geht mit Referenzen auch nicht (string++).
Das heißt, wenn ich im Konstruktor von Bar bisher einen Pointer (auf ein Objekt der Klasse Foo) verwendet habe (um den Pointer intern in Bar zu speichern) und ich dann für mein Objekt von Bar den Pointer auf Foo verändern will, ich da bei nem Zeiger bleiben muss und keine Referenz nehmen kann?Xin hat geschrieben:Und natürlich, dass Du eine Referenz nicht neu belegen kannst - sie muss direkt in der Initialisierungsliste des Konstruktors belegt werden und die Referenz-Variable ist danach unveränderlich (das bezieht sich nicht auf die Daten, auf die referenziert wird)Wenn Du also einen Zeiger brauchst, der mal auf a oder b zeigen können muss, dann brauchst Du wirklich einen Zeiger und keine Referenz.Code: Alles auswählen
int a = 1; int b = 2; int & ref = a; // <- muss sofort initialisiert werden ref = b; // a wird zu 2, aber ref referenziert unverändert auf a.