Notwendigkeit von const bei überladener Ausgabe?
-
Hi @ all!

Ich möchte den Ausgabeoperator so überladen, daß er die Objekte meiner selbst geschrieben Klasse Matrix ausgeben kann. Nun glaube ich mich dunkel daran zu erinnern, daß ich meiner Operatorfunktion die auszugebende Matrix als const übergeben muß, da es sonst in manchen Fällen zu Problemen kommen kann.
Also etwa so:ostream& operator <<(ostream& os,const Matrix& M) {...}Ist irgendjemandem bekannt, in welchen Fällen ohne const Probleme auftreten können bzw. warum diese dann auftreten?

-
Wenn eine Funktion einen NichtConst Parameter erwartet, dann schließt sie damit nicht explizit aus, dass die Variable verändert wird innerhalb der Funktion.
Also kannst du so einer Funktion keine konstanten Variablen übergeben, denn die dürfen ja nicht verändert werden.
Andersrum ist es aber egal, denn wenn die Funktion sagt, die Variable werde nicht verändert (const Parameter), dann stört es ja den Compiler nicht, wenn eine Variable übergeben wird, die verändert werden dürfte.
-
Probleme kannst du bekommen, wenn du dem Operator (mit "Matrix& m")eine konstante Matrix oder ein temporäres Objekt übergeben willst - die können nämlich nicht in eine nichtkonstante Referenz umgewandelt werden.
(umgekehrt hast du keine Probleme, eine nichtkonstante Matrix an einen "const Matrix& m" weiterzureichen).ostream& operator<<(ostream out, MAtrix& m) {...} Matrix operator+(const Matrix& r,const Matrix& l) {...} Matrix m1,m2; const Matrix m3=...; cout<<m3;//const auf nicht-const - geht nicht cout<<m1+m2;//temporäres Objekt auf nicht-const - geht nicht
-
Danke!
