Was bedeuten die beiden Operatoren & und :: ?
-
Hallo
Dann eben anstatt noch exakter stattdessen...
zum Beispiel das hier./Edit :
Falsch, & besagt, dass der Parameter Name eine Referenz ist.
In dem zweiten Code war das & auch als Referenz für eine Rückgabe.
bis bald
akari
-
Javaner schrieb:
> wird bei Inputstreams benutzt um etwas aus dem Stream in eine Variable zu schieben
aber nicht verwechseln mit dem echten shift operator....
-
:: Ist der Bereichsauflösungsoperator damit kannst dir einen Bereich "zugänglich" machen.
Das & sagt im ersten Beispiel das der Parameter nicht kopiert werden soll sondern als referenz übernommen werden soll also kann man den parameter ändern.
Beim 2. Beispiel steht das & vor dem funktionsnamen und das sorgt dafür das die funktion auch auf der linken seite eines Ausdrucks stehen darf, sprich als L-Value.
Aber du solltest deine Bücher lieber einzelnt lesen!
-
akari schrieb:
In dem zweiten Code war das & auch als Referenz für eine Rückgabe.
Sorry, hab ich übersehen.
tobZel schrieb:
Beim 2. Beispiel steht das & vor dem funktionsnamen und das sorgt dafür das die funktion auch auf der linken seite eines Ausdrucks stehen darf, sprich als L-Value.
Nur wenn die Referenz auf eine Variable zeigt, die außerhalb der Funktion deklariert wurde.
int &foo() { int bar; // mach irgendwas mit bar return bar; }
undefiniertes Verhalten
-
Michael E. schrieb:
Nur wenn die Referenz auf eine Variable zeigt, die außerhalb der Funktion deklariert wurde.
...oder wenn die lokale Variable statisch ist. Dann geht's auch.
int& foo() { static int i; return i; } foo() = 7;MfG
GPC
-
Ja aber wer gibt schon ne referenz auf ne lokale Variable zurück??
-
Och, das ist ganz schnell passiert, wenn man noch nie drüber nachgedacht hat. Manche Compiler akzeptieren das sogar.
-
Frage, wie sieht eigentlich damit aus:
class A { private: int sth; public: ... int& getSth(){ return sth; } }; class B { private: class A a; public: ... int& getSthModifiedFromA(){ int& i = a.getSth(); i += 1; return i; } };Gibt es sowas in der Art auch, dass ich Referenzen nutze und dann weiterreichen kann? Oder muss ich dass über einen Pointer lösen?
-
Ja, das funktioniert auch. Allerdings würde deine Methode auch das Element von A verändern.
(und nebenbei machst du mit GetSth() die Sicherheit zunichte, die du mit der private-Deklaration erreichen wolltest)
-
Danke ... kann ich die Referenz nicht const machen? Damit darf man doch nicht daran ändern oder?
-
Nachtrag: Natürlich nur unter der Bedingung, dass ich selbst an der Referenz nichts ändern möchte, sondern nur Werte etc. erhalten möchte, um den Zustand der zugreifenden Objektes anzupassen.
-
Klar kann GetSth() eine konstante Referenz zurückgeben (wenn du statt int's größere Objekte verwaltest, ist das sogar günstiger als eine Wert-Übergabe). Allerdings kann B::getSthModifiedFromA() in der obigen Form nichts mit einem const int& anfangen.