Operatoren in globalen namespace?



  • Hallo,

    angenommen ich habe eine Klasse in einem namespace, sollte man dann etwaige Operator-Überladungen in dem zugehörigen namespace definieren oder global? Also etwa so ein Code:

    namespace stuff
    {
        struct mystruct { int value; };
    
        // Variante 1:
        std::ostream &operator<<(std::ostream &str, mystruct const &my) { 
            stream << my.value;
            return stream;
        } 
    }
    
    // Oder Variante 2:
    std::ostream &operator<<(std::ostream &str, stuff::mystruct const &my) { 
        stream << my.value;
        return stream;
    }
    

    Gibt es hier ein "best-practise" oder eine Empfehlung oder ist das egal?


  • Mod

    Immer im jeweiligen Namensraum. Die Definition im globalen Namensraum hat keinerlei Vorteil, könnte aber u.U. zu unerwarteter Anwendung des Operators/Mehrdeutigkeiten führen (wenn die zugehörige Klasse über entsprechende Konvertierungsmöglichkeiten verfügt) - oder umgekehrt dazu, dass der Operator wegen Verdeckung nicht gefunden wird.



  • Ok, alles klar, Danke 👍

    Dann werd ich das in Zukunft so handhaben.


Anmelden zum Antworten