Ich bin ein großer Fan davon, den Compiler so viel Arbeit wie möglich für Sie erledigen zu lassen. Beim Schreiben einer einfachen Klasse kann der Compiler Ihnen Folgendes kostenlos zur Verfügung stellen:
- Ein Standardkonstruktor (leer)
- Ein Kopierkonstruktor
- Ein Zerstörer
- Ein Zuweisungsoperator (
operator=
)
Es kann Ihnen jedoch keine Vergleichsoperatoren geben - wie operator==
oder operator!=
. Zum Beispiel:
class foo
{
public:
std::string str_;
int n_;
};
foo f1; // Works
foo f2(f1); // Works
foo f3;
f3 = f2; // Works
if (f3 == f2) // Fails
{ }
if (f3 != f2) // Fails
{ }
Gibt es dafür einen guten Grund? Warum sollte ein Vergleich von Mitglied zu Mitglied ein Problem sein? Wenn die Klasse Speicher zuweist, möchten Sie natürlich vorsichtig sein, aber für eine einfache Klasse könnte der Compiler dies sicherlich für Sie tun?
==
, genauso wie es =
unter bestimmten Bedingungen eine Standardautomatikzuweisung ( ) gibt. (Das Argument über Zeiger ist inkonsistent, da die Logik sowohl für =
als ==
auch nicht nur für die Sekunde gilt.)