«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему для конструкторов C++ используются два символа?

Почему для конструкторов C++ используются два символа?

Опубликовано 18 ноября 2024 г.
Просматривать:629

Why Are There Two Symbols for C   Constructors?

Двойные символы для конструкторов C

ABI Itanium C указывает, что искаженные имена конструкторов включают информацию об их типе и параметрах. Соответственно, две записи конструктора, наблюдаемые в библиотеках, происходят из разных типов конструкторов:

  • Полный конструктор объекта (C1): Этот конструктор полностью инициализирует объект, включая любые виртуальные базовые классы. .
  • Конструктор базового объекта (C2): Этот конструктор инициализирует сам объект вместе с элементами данных и невиртуальные базовые классы.

Двойные символы и множественные ошибки определения

Несмотря на наличие двойных записей, конфликтующие определения символов не возникают из-за использования Суффиксы C1 и C2. ABI гарантирует уникальность искаженных имен, обеспечивая поддержку компилятора для различной обработки этих двух типов конструкторов.

Дополнительные сведения

  • При отсутствии виртуальной базы классов, конструкторы полного и базового объекта идентичны, а символы могут быть связаны с одним и тем же кодом при достаточной оптимизации.
  • Необходимость двойного Символы конструктора в первую очередь обусловлены поддержкой полиморфизма, при котором разные объекты могут наследовать разные базовые классы, требующие специальной инициализации.
  • Это поведение когда-то отображалось в выводе фильтра c, но больше не включено.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3