Doppelte Symbole für C-Konstruktoren
Das Itanium C ABI legt fest, dass verstümmelte Namen von Konstruktoren Informationen über deren Typ und Parameter enthalten. Dementsprechend stammen die beiden in Bibliotheken beobachteten Konstruktoreinträge aus ihren unterschiedlichen Konstruktortypen:
-
Vollständiger Objektkonstruktor (C1): Dieser Konstruktor initialisiert das Objekt vollständig, einschließlich aller virtuellen Basisklassen .
-
Basisobjektkonstruktor (C2): Dieser Konstruktor initialisiert das Objekt selbst zusammen mit Datenmitgliedern und nicht-virtuelle Basisklassen.
Doppelte Symbole und mehrere Definitionsfehler
Trotz doppelter Einträge entstehen durch die Verwendung von keine widersprüchlichen Symboldefinitionen die Suffixe C1 und C2. Der ABI stellt sicher, dass die verstümmelten Namen eindeutig sind, und bietet Compiler-Unterstützung für die unterschiedliche Behandlung dieser beiden Konstruktortypen.
Zusätzliche Details
- In Ermangelung einer virtuellen Basis Klassen sind die vollständigen und Basisobjektkonstruktoren identisch und die Symbole können bei ausreichender Optimierung auf denselben Code verwiesen werden.
- Die Notwendigkeit von Dual Konstruktorsymbole basieren in erster Linie auf der Unterstützung von Polymorphismus, bei dem verschiedene Objekte unterschiedliche Basisklassen erben können, was eine spezielle Initialisierung erfordert.
- Dieses Verhalten wurde früher in der C-Filter-Ausgabe angezeigt, ist aber nicht mehr enthalten.
Das obige ist der detaillierte Inhalt vonWarum gibt es zwei Symbole für C-Konstruktoren?. 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