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.


  • Mod

    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" 😉


Anmelden zum Antworten