Implizierte Objekterstellung bei Referenzparametern?



  • Hallo,

    ist es zu realisieren, dass folgender Code funktioniert?

    class Point
    {
    public:
        Point(int x, int y) : _x(x), _y(y) { }
        // ...
        int _x;
        int _y;
    };
    
    void DoSomething(const Point &point)
    {
        // ...
    }
    
    DoSomething(Point(20, 30));
    

    Ich weiß, dass es seine Gründe hat, warum es so nicht gehen sollte... Kann man es dennoch umgehen?
    Sonst muss ich jede Funktion 2x implementieren bzw. deklarieren, einmal mit und einmal ohne Referenzparameter...

    Vielen Dank!



  • Der dürfte doch Problemlos funktionieren.



  • theliquidwave schrieb:

    Sonst muss ich jede Funktion 2x implementieren bzw. deklarieren, einmal mit und einmal ohne Referenzparameter...

    Für eine const-reference kann auch ein rvalue übergeben werden.



  • ???
    Ich dachte immer, dass der Standard so etwas verbietet, weil das Objekt ja noch nicht existiert...
    Wtf?!

    Gab es da eine ähnliche Regel, so dass ich etwas verwechsele?

    Edit:

    Für eine konstante Referenz kann auch ein rvalue übergeben werden.

    Das erklärt einiges... Danke 😃

    http://ideone.com/lVT0um



  • theliquidwave schrieb:

    Ich dachte immer, dass der Standard so etwas verbietet, weil das Objekt ja noch nicht existiert...

    Du erzeugst ja ein temporäres Objekt, das zur Zeit des Funktionsaufruf bereits existiert. In C++ kannst du temporäre Objekte an Referenzen auf const binden.

    Sone schrieb:

    Für eine konstante Referenz kann auch ein rvalue übergeben werden.

    Du meinst Const-Referenz.



  • Nexus schrieb:

    Sone schrieb:

    Für eine konstante Referenz kann auch ein rvalue übergeben werden.

    Du meinst Const-Referenz.

    Immer 😃 thx


Anmelden zum Antworten