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