Gültigkeit Temporaries



  • Hi,

    folgender Code:

    struct a
    {
        Proxy operator= (a const& Rhs);
    };
    

    Ich kann das zurückgegebene Objekt in derselben Zeile (bzw. bis zum Semikolon) als LValue behandeln, ist es aber auch wellformed dies zu tun? Und wenn nicht, ist es wellformed die Member von Proxy mutable zu machen und diese dann zu ändern (nachdem ich das temporäre Objekt als RValue angenommen habe via Const-Referenz z.B.)?



  • Apfelkuchen um 4 schrieb:

    Ich kann das zurückgegebene Objekt in derselben Zeile (bzw. bis zum Semikolon) als LValue behandeln,

    Nur über Memberfunktionen bzw. non-standard Compiler-Extensions ala MSVC.

    ist es aber auch wellformed dies zu tun?

    Klar, was sollte dagegen sprechen?
    Du darfst es ja auch ganz explizit als Move-Quelle verwenden, wieso sollte man es dann nicht anderwärtig modifizieren dürfen?

    Und wenn nicht, ist es wellformed die Member von Proxy mutable zu machen und diese dann zu ändern (nachdem ich das temporäre Objekt als RValue angenommen habe via Const-Referenz z.B.)?

    Ich würde es eher per RValue-Referenz annehmen.
    Bei mutable sollte man sich halt seit C++11 zurückhalten. Siehe http://herbsutter.com/2013/01/01/video-you-dont-know-const-and-mutable/



  • hustbaer schrieb:

    Bei mutable sollte man sich halt seit C++11 zurückhalten. Siehe http://herbsutter.com/2013/01/01/video-you-dont-know-const-and-mutable/

    Wie hast du denn das da reingelesen? Kannst du mal ein Beispiel zeigen wo man in C++03 const benutzen würde wo man es in C++11 besser nicht mehr tut? Oder missverstehe ich deinen Satz?



  • nwp3 schrieb:

    hustbaer schrieb:

    Bei mutable sollte man sich halt seit C++11 zurückhalten. Siehe http://herbsutter.com/2013/01/01/video-you-dont-know-const-and-mutable/

    Wie hast du denn das da reingelesen? Kannst du mal ein Beispiel zeigen wo man in C++03 const benutzen würde wo man es in C++11 besser nicht mehr tut? Oder missverstehe ich deinen Satz?

    Nicht const, mutable.
    Man sollte mutable nicht mehr für non-thread-safe Member benutzen (z.B. int), denn mutable heißt thread safe.


Anmelden zum Antworten