operator- auch ohne lvalue?



  • damit ist gemeint, kann man das "-" auch so definieren, wie in der Mathematik, so das "z = - b" als "z = 0 - b" zu verstehen ist?
    Konkret stellt sich das Problem bei meinen beiden Klassen complex und matrix.
    Muss fürs invertieren von c1 immer "Complex(0,0) - c1" schreiben.
    Momentan ist der Prototyp so:
    const Complex operator- (const Complex& c1, const Complex& c2);
    Ist keine Memberfunktion - wenn ich jetzt eine Definition mit nur einem Wert mache, wie erklär ich es dann dem Compilier, dass es sich dabei um den rvalue handelt?



  • eigentlich ganz einfach ...

    Complex operator-(Complex const& c)
    {
      return Complex(-c.real(), -c.imag());
    }
    


  • Mittels

    Foo Foo::operator-() const
    {
      //...
    }
    

    Wenn ich nicht irre.



  • danke das wars! dachte nicht dass es so einfach war.
    macht man jetzt (laut c-knigge) (Complex const& c) oder (const Complex& c)? Hab bisher immer letzteres verwendet, war ich lass mich gern eines besseren belehren!



  • Völlig egal. Complex const& ist logischer, weil das const sich immer auf das Element zu seiner linken bezieht (z.B. deklariert int * const foo; einen konstanten Zeiger auf ein variables int). const Complex& ist mehr traditionell, und entspricht auch der Schreibweise im Standard.

    Allerdings entscheidet der Knigge (oder besser, "Sutter") zugunsten der Nicht-Member-Funktion: http://www.gotw.ca/gotw/084.htm


Anmelden zum Antworten