Konvertierungskonstruktor vs. Konvertierungsoperator: Vorrang
In C können sowohl Konvertierungskonstruktoren als auch Konvertierungsoperatoren verwendet werden, um Objekte zwischen verschiedenen Klassen zu konvertieren , aber ihre Priorität bei der Überladungsauflösung kann manchmal zu unerwarteten Ergebnissen führen.
Frage 1: Prioritätsfestlegung
Im in der Frage bereitgestellten Codeausschnitt entscheidet sich der Compiler dafür Rufen Sie den Konvertierungsoperator B() auf, obwohl ein passender Konvertierungskonstruktor vorhanden ist. Dies deutet darauf hin, dass der Konvertierungsoperator in diesem Fall Vorrang hat.
Gemäß dem C-Standard (8.5/14) sind „benutzerdefinierte Konvertierungssequenzen, die vom Quelltyp in den Zieltyp konvertieren können [... ] werden wie in 13.3.1.4 beschrieben aufgezählt, und die beste wird durch Überladungsauflösung (13.3) ausgewählt Aus einer objektorientierten Perspektive könnte man argumentieren, dass die Klasse, die die Konvertierung definiert (in diesem Fall A), mehr Einfluss darauf haben sollte, wie die Konvertierung durchgeführt wird. In C berücksichtigt der Compiler jedoch in erster Linie Typsicherheit und Effizienz.
Der Konvertierungsoperator ist normalerweise effizienter, da er inline sein kann, während der Konvertierungskonstruktor einen expliziten Aufruf erfordert. Darüber hinaus kann der Konvertierungsoperator auf const festgelegt werden, was eine Bindung an R-Werte ermöglicht, was ihm in bestimmten Situationen einen Vorteil verschafft.
Auswahl der KonvertierungsmethodeDie Priorität zwischen Konvertierungskonstruktoren und Konvertierungsoperatoren werden durch den in 13.3.3.2/3 des C-Standards beschriebenen Überlastungsauflösungsprozess festgelegt. Im Fall des bereitgestellten Codes wird der Konvertierungsoperator ausgewählt, weil er weniger konstante Qualifizierer hat und effizienter an den R-Wert A() gebunden werden kann.
Im Allgemeinen hängt die Wahl zwischen einem Konvertierungskonstruktor und einem Konvertierungsoperator davon ab auf die spezifischen Anforderungen des Kodex. Wenn Effizienz und Bindung an R-Werte wichtig sind, ist ein Konvertierungsoperator möglicherweise die bessere Wahl. Wenn die Konvertierungslogik jedoch komplex ist oder von der Zielklasse gesteuert werden soll, ist ein Konvertierungskonstruktor möglicherweise besser geeignet.
Das obige ist der detaillierte Inhalt vonKonvertierungskonstruktor vs. Konvertierungsoperator: Was hat in C Vorrang?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!