T*& als Rückgabewert
-
Ich bin eben beim herumprobieren mit einem Template beim Rückgabewert auf etwas gestoßen das bei mir eine Frage aufwirft. Wenn ich als Rückgabewert T& für eine Funktion verwende unt T=int ist wäre der Rückgabewert int&, wenn T=int* ist bekomme ich einen int*. Hat in diesem Fall der * vom Zeiger eine höhere Priorität als das & der Referenz und wird somit die referenz vom Compiler verworfen? Ist das nutzen einer solchen Konstruktion sicher?
-
Xebov@Logoff schrieb:
Hat in diesem Fall der * vom Zeiger eine höhere Priorität als das & der Referenz und wird somit die referenz vom Compiler verworfen? Ist das nutzen einer solchen Konstruktion sicher?
Da wird nichts verworfen. int*& ist eine Referenz auf einen Zeiger auf int. So wie int** ein Zeiger auf einen Zeiger auf int ist. Und das Nutzen einer solchen "Konstruktion" ist genauso sicher wie das Nutzen von Referenzen auf jeden anderen Typ.
-
Du gibst dann eine Referenz auf einen Zeiger zurück, wozu auch immer das gut sein soll. Die Sicherheit ist die gleiche wie immer bei Rückgabe von Referenzen: Der Compiler sollte dich nur gültige Referenzen zurückgeben lassen. Das Objekt auf das der Zeiger zeigt sollte aber sinnvollerweise nach Verlassen der Funktion noch existieren.
-
SeppJ schrieb:
Du gibst dann eine Referenz auf einen Zeiger zurück, wozu auch immer das gut sein soll.
Naja er schreibt ja dass es um Templates geht. Beispielsweise liefern die Zugriffsoperatoren der STL-Container oft Referenzen auf T. Wenn man also int* in so einem Container speichert kommen die Referenzen auf Zeiger ganz von selber.
-
Danke. Wusste bisher garnicht das sowas Möglich ist. Habe niemals Erwähnungen dazu gesehen oder die Verwendung.
-
Brauchst du zum Beispiel auch, wenn du in einer Funktion einen Zeiger verändern willst. Halt wie man Referenzen braucht - Zeiger sind schliesslich auch nur Objekte.
void assign_new_int(int*& ptr) { ptr = new int; }
-
Für den Zweck hab ich bisher nur Zeiger Zeiger gesehen, vermutlich war mir deswegen auch eine Referenz auf Zeiger absolut unbekannt.
-
Xebov schrieb:
Für den Zweck hab ich bisher nur Zeiger Zeiger
Das ist die Art und Weise wie das in C gemacht wird und die auch in C++-Code noch häufig anzutreffen ist (sofern man da von häufig sprechen kann, kommt ja nicht soo häufig vor). Referenzen auf Zeiger sind "C++iger"
