"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que existem dois símbolos para construtores C++?

Por que existem dois símbolos para construtores C++?

Publicado em 2024-11-18
Navegar:514

Why Are There Two Symbols for C   Constructors?

Símbolos duplos para construtores C

A ABI Itanium C especifica que nomes mutilados de construtores incluem informações sobre seu tipo e parâmetros. Conseqüentemente, as duas entradas de construtor observadas em bibliotecas derivam de seus diferentes tipos de construtor:

  • Complete Object Constructor (C1): Este construtor inicializa totalmente o objeto, incluindo quaisquer classes base virtuais .
  • Construtor de objeto base (C2): Este construtor inicializa o próprio objeto, junto com os membros de dados e a base não virtual classes.

Símbolos duplos e erros de definição múltipla

Apesar de terem entradas duplas, definições de símbolos conflitantes não surgem devido ao uso dos sufixos C1 e C2 . A ABI garante que os nomes mutilados sejam exclusivos, fornecendo suporte do compilador para lidar com esses dois tipos de construtores de maneira diferente.

Detalhes adicionais

  • Na ausência de base virtual classes, os construtores de objeto completo e base são idênticos e os símbolos podem ter alias para o mesmo código sob otimização suficiente.
  • A necessidade de símbolos de construtor duplo é impulsionada principalmente pelo suporte para polimorfismo, onde diferentes objetos podem herdar diferentes classes base, exigindo inicialização especializada.
  • Este comportamento já foi exibido na saída c filt, mas não está mais incluído.
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3