Maison > Article > développement back-end > Pourquoi les constructeurs de classes sans classes de base virtuelles apparaissent-ils dupliqués dans le code compilé par GCC ?
Dans le code compilé par GCC, les constructeurs des classes sans classes de base virtuelles peuvent apparaître dupliqués dans la bibliothèque listings, soulevant des questions sur les raisons de ce comportement. Pour élaborer, l'Itanium C ABI définit un ensemble de conventions de dénomination pour les symboles C, y compris les constructeurs.
Examinons les noms mutilés de ces constructeurs :
Comme vous pouvez le constater, les constructeurs se distinguent par le C1 (constructeur d'objet complet) et C2 (constructeur d'objet de base ) suffixes.
Cette dualité découle du polymorphisme support, même s'il n'est pas strictement nécessaire dans ce cas. Le constructeur d'objet complet initialise en outre les classes de base virtuelles, tandis que le constructeur d'objet de base initialise les membres de données et les classes de base non virtuelles.
Malgré plusieurs entrées dans les listes de bibliothèques, ces constructeurs en double le font ne provoque pas d'erreurs de "définition multiple du symbole __". En effet, l'ABI fournit des noms mutilés uniques pour chaque type de constructeur, garantissant qu'ils sont traités comme des symboles distincts par l'éditeur de liens.
La double émission de symboles de constructeur dans le code compilé par GCC est le résultat de la prise en charge du polymorphisme et des conventions de dénomination Itanium C ABI. Comprendre ces concepts éclaire les raisons de ce comportement et répond à toute préoccupation concernant plusieurs définitions.
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!