Wenn ich einen eigenen Zuweisungsoperator definieren, die eine andere Signatur als der normalerweise generierten Standardzuweisungsoperator hat:Wann wird der C++ - Standardzuweisungsoperator nicht mehr zugänglich?
struct B;
struct A {
void operator = (const B& b) {
// assign something
}
};
hat den Standard-Zuweisungsoperator, in diesem Fall operator = (A&)
(oder dergleichen, korrigieren Sie mich, wenn falsch) unbestimmt/unzugänglich werden?
AFAIK das gilt für den Standardkonstruktor, der nicht existiert, wenn wir einen anderen Konstruktor definieren. Aber ich bin mir wirklich nicht sicher, ob das bei den anderen "magischen" Vorgaben der Fall ist.
Der Grund, warum ich frage: Ich möchte vermeiden, dass der Standardkopiekonstruktor versehentlich über eine implizite Typkonvertierung aufgerufen wird. Wenn es nicht existiert, könnte es nie passieren.
Danke für die Standard-Referenz! Das sagt eigentlich mehr als meine Beispiele. – xtofl
Sie haben Recht. Ich lösche meine Antwort. –
@Neil, haben Sie sich gefragt, was Verwendung = Standard sein könnte. Eine davon ist, in dem, was verfügbar ist, explizit zu sein, ein anderes ist die Zugänglichkeit zu ändern, ein drittes ist, dass es ermöglicht, die Implementierung nicht inline zu machen, während sichergestellt wird, dass die Evolution der Klasse es nicht bricht. Eine weitere Rechtfertigung ist, dass das Merkmal breiter ist als die Zuordnung, und es gab keinen Anreiz, eine Ausnahme zu machen, selbst wenn es keinen Nutzen hätte. – AProgrammer