Heim > Backend-Entwicklung > C++ > Beim Konvertieren zwischen Typen: Hat das Quell- oder Zielobjekt Vorrang?

Beim Konvertieren zwischen Typen: Hat das Quell- oder Zielobjekt Vorrang?

Mary-Kate Olsen
Freigeben: 2024-11-07 08:39:03
Original
791 Leute haben es durchsucht

When Converting Between Types: Does the Source or Destination Object Take Precedence?

Konvertierungskonstruktor vs. Konvertierungsoperator: Vorrang

In C bieten sowohl Konvertierungskonstruktoren als auch Konvertierungsoperatoren Möglichkeiten, Objekte zwischen verschiedenen Typen zu konvertieren. Wenn beide für eine bestimmte Konvertierung verfügbar sind, ist es wichtig, ihre Priorität zu verstehen, um zu bestimmen, welche aufgerufen wird.

Prioritätsfestlegung

Die Priorität zwischen Konvertierungskonstruktoren und Konvertierungsoperatoren ist definiert durch den C-Standard (13.3.1.4):

Überladungsauflösung wird verwendet, um die aufzurufende benutzerdefinierte Konvertierung auszuwählen. Kandidatenfunktionen werden wie folgt ausgewählt:

  • Konvertierende Konstruktoren (12.3.1) des Zieltyps sind Kandidatenfunktionen.
  • Konvertierungsfunktionen des Quelltyps und seiner Basisklassen, die a ergeben Typ, der mit dem Zieltyp kompatibel ist, sind Kandidatenfunktionen.

Operator überschreibender Konstruktor

Im bereitgestellten Beispielcode, in dem sowohl ein Konvertierungskonstruktor als auch ein Konvertierungsoperatoren sind für die Klassen A bis B definiert, der Konvertierungsoperator hat Vorrang:

class A;

class B { 
      public: 
         B(){} 
         
         B(const A&) //conversion constructor
         { 
              cout << &quot;called B's conversion constructor&quot; << endl; 
         } 
};

class A { 
      public: 
         operator B() //conversion operator
         { 
              cout << &quot;called A's conversion operator&quot; << endl; 
              return B(); 
         } 
};
Nach dem Login kopieren

Dies liegt daran, dass beim Binden von Referenzparametern (hier der implizite Objektparameter der Konvertierungsfunktion) die nicht konstanten Die Referenz in der Konvertierungsfunktion (A&) hat Vorrang vor der const-Referenz im Konvertierungskonstruktor (const A&).

Objektorientierte philosophische Überlegungen

Bezüglich der Bei der philosophischen Frage, welche Klasse für die Konvertierung eines Objekts verantwortlich sein soll, stellt sich der Standard auf die Seite der Quellklasse (in diesem Fall A). Dies steht im Einklang mit dem Prinzip der Kapselung, da es der Quellklasse ermöglicht, den Konvertierungsprozess zu steuern und die Korrektheit des resultierenden Objekts (B) sicherzustellen.

Es liegt letztendlich im Ermessen des Entwicklers, den geeigneten Konvertierungsmechanismus zu bestimmen für ein bestimmtes Szenario unter Berücksichtigung von Faktoren wie Kapselung, Abstraktion und Codelesbarkeit.

Das obige ist der detaillierte Inhalt vonBeim Konvertieren zwischen Typen: Hat das Quell- oder Zielobjekt Vorrang?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage