Heim  >  Artikel  >  Backend-Entwicklung  >  Mehrdeutigkeit der Konvertierungssequenz: Wann übertrumpft ein Konvertierungsoperator einen Konstruktor?

Mehrdeutigkeit der Konvertierungssequenz: Wann übertrumpft ein Konvertierungsoperator einen Konstruktor?

DDD
DDDOriginal
2024-11-12 06:17:02934Durchsuche

Conversion Sequence Ambiguity: When Does a Conversion Operator Trump a Constructor?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn