2 Objekte miteinander vergleichen



  • Da er kein Mitglied der Klasse ist natürlich ausserhalb. Innerhalb kannst Du ihn nur friend deklarieren um auf private Member der Objekte zuzugreifen.



  • Oder auch als firend + inline in der Klasse.

    class Foo{
    public:
      friend void operator==(const Foo&, const Foo&){ /*...*/ }
    };
    

    Bei trivialen Vergleichen wie hier bevorzuge ich die Variante.

    Würde das den wirklich nicht gehen. Es wird doch für die 2 ein temporäres Objekt erzeugt und von dem könnte man doch den Operator aufrufen, oder?

    Das temporäre Objekt wird im Zuge eines impliciten Casts erzeugt. Die Regeln wann das passiert sind recht komplex allerdings sind sie hier nicht wichtig da sie sich nur auf Argumente beziehen. Allerdings ist "a" in "a == b" im Falle eines Member "=="-Operator kein Argument und folglich kann auch kein temporäres Objekt durch einen impliciten Cast erzeugt werden.


Anmelden zum Antworten