pointer nach referenz casten
-
Hallöchen,
wenn man einen Pointer auf ein Objekt hat, aber die Referenz
auf das Objekt braucht, kann man dann einfach den Pointer als
Referenz casten (d.h. die Referenz ist dann einfach die Adresse
die im Pointer steht)? Wie z.B. hier:void A(obj &o) { ... } void B(obj *o) { A((obj&)o); }Oder muss man immer dereferenzieren?
void A(obj &o) { ... } void B(obj *o) { A(*o); }Wenn beides geht, ist die erste Version
mit dem Casten schneller, weil dort das
dereferenzieren wegfällt?Danke!
Gruß gast_45
-
Die zweite Variante ist richtig. Die Referenz ist so zu behandeln als wenn Du das Originalobjekt in der Hand hättest. (Im Hintergrund ist es das Originalobjekt.)
Ob das erste Beispiel funktionieren könnte weiß ich nicht. Wenn doch dann hast Du auf jeden Fall die Dereferenzierung vergessen.
void B(obj *o) { A((obj&)*o); }Also auf jeden Fall dereferenzieren.
-
Die erste Version ist semantisch falsch: Du versuchst einen Zeiger auf ein Objekt als einen Wert dieses Objektes aufzufassen und eine Referenz darauf zu bekommen. Das müsste hier zwar abhängig vom Typ manchmal gehen (mit reinterpret_cast bzw. einem C-Style-Cast), aber ist nicht das was du willst. Es bleibt dir nichts anderes übrig als zu dereferenzieren. Glücklicherweise ist das Dereferenzieren eines Zeigers eine Operation, die auf Maschinenebene keine Entsprechung hat, es kostet also nichts.
Erst der spätere Zugriff auf den Wert kostet etwas, aber auch da macht es keinen Unterschied, ob du über die Referenz oder über den Zeiger gehst. Wenn es nicht unterschiedliche Rahmenbedingungen für die Optimierung gäbe, könnte man erwarten, dass Referenzen und Zeiger sich in identischem Maschinencode niederschlagen.
-
danke!!
-
ich dachte halt das eine referenz auf ein objekt
im prinzip nichts anderes ist als ein pointer
auf ein objekt (beide tragen die adresse des objekts).
und das ich deswegen vielleicht auch einfach den
pointer als referenz casten könnte. na ja offensichtlich
ist eine referenz doch nicht einfach nur eine speicheradresse
wie sie in einem pointer liegt?
-
Hallo
Technisch gesehen sind Referenzen und Pointer dasselbe, es kommt der gleiche Maschinencode raus. Beide bestehen selber nur aus einer Speicheradresse. Aber syntaktisch und semantisch unterscheiden sie sich.
bis bald
akari