Maison >développement back-end >C++ >Pourquoi y a-t-il deux symboles pour les constructeurs C ?

Pourquoi y a-t-il deux symboles pour les constructeurs C ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-24 02:41:09324parcourir

Why Are There Two Symbols for C   Constructors?

Symboles doubles pour les constructeurs C

L'ABI Itanium C spécifie que les noms mutilés des constructeurs incluent des informations sur leur type et leurs paramètres. En conséquence, les deux entrées de constructeur observées dans les bibliothèques proviennent de leurs différents types de constructeur :

  • Constructeur d'objet complet (C1) : Ce constructeur initialise entièrement l'objet, y compris les classes de base virtuelles. .
  • Constructeur d'objet de base (C2) : Ce constructeur initialise l'objet lui-même, ainsi que les données membres et classes de base non virtuelles.

Symboles doubles et erreurs de définition multiples

Malgré les entrées doubles, les définitions de symboles contradictoires ne surviennent pas en raison de l'utilisation de les suffixes C1 et C2. L'ABI garantit que les noms mutilés sont uniques, fournissant ainsi au compilateur la prise en charge de la gestion différente de ces deux types de constructeurs.

Détails supplémentaires

  • En l'absence de base virtuelle classes, les constructeurs d'objets complets et de base sont identiques et les symboles peuvent être associés au même code avec une optimisation suffisante.
  • La nécessité de Les symboles de constructeur double sont principalement pilotés par la prise en charge du polymorphisme, dans lequel différents objets peuvent hériter de différentes classes de base, nécessitant une initialisation spécialisée.
  • Ce comportement était autrefois affiché dans la sortie de c filt mais n'est plus inclus.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn