Heim > Artikel > Backend-Entwicklung > Mehrdeutigkeit der Konvertierungssequenz: Wann übertrumpft ein Konvertierungsoperator einen Konstruktor?
Mehrdeutigkeit der Konvertierungssequenz: Vorrang von Konvertierungskonstruktoren gegenüber Operatoren
Bei der Initialisierung eines Objekts der Klasse B aus einem Objekt der Klasse A tritt Mehrdeutigkeit auf kann auftreten, wenn sowohl ein Konvertierungskonstruktor als auch ein Konvertierungsoperator definiert sind. Die Interaktion zwischen diesen Funktionen bestimmt, welche aufgerufen wird.
Prioritätsfestlegung
Gemäß dem C-Standard (8.5/14) erfolgt dies durch die benutzerdefinierte Konvertierung die von A nach B konvertieren können, werden aufgelistet, und die beste wird durch Überladungsauflösung ausgewählt. Konvertierungsoperatoren werden nur berücksichtigt, wenn der Konvertierungskonstruktor nicht anwendbar ist.
Parametertransformation
Überladungsauflösung wandelt die Konvertierungsfunktionen und Konstruktoren in Listen von Parametern um, die den Aufrufargumenten entsprechen . Für einen Konvertierungsoperator wird der implizite Objektparameter generiert, wodurch eine Bindung zwischen dem Funktionsparameter des Operators und dem Quellobjekt erstellt wird.
Gewinnerkandidat
Der Konvertierungsoperator gewinnt aufgrund der „wenigsten konstanten Qualifikation“-Regel (13.3.3.2/3). In diesem Fall hat der Konstruktor B(const A&) eine konstante Referenz als Parameter, während der Konvertierungsoperator B() eine nicht konstante Referenz hat. Da das Quellobjekt ein R-Wert (temporär) ist, kann die nicht konstante Referenz daran gebunden werden.
Objektorientierte Perspektive
Aus objektorientierter Sicht: Die Standardauswahl des Konvertierungsoperators von A gegenüber dem Konstruktor von B legt nahe, dass die Verantwortung für die Definition des Konvertierungsvorgangs bei der Quellklasse (A) liegt. Es bleibt jedoch fraglich, ob B als Zielklasse die Hauptverantwortung für diese Konvertierung tragen sollte.
Das obige ist der detaillierte Inhalt vonMehrdeutigkeit der Konvertierungssequenz: Wann übertrumpft ein Konvertierungsoperator einen Konstruktor?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!