首页 >后端开发 >C++ >为什么 C 库中有两个构造函数符号?

为什么 C 库中有两个构造函数符号?

Patricia Arquette
Patricia Arquette原创
2024-11-28 17:50:10680浏览

Why Are There Two Constructor Symbols in C   Libraries?

C 库中构造函数符号的双重定义

在 C 中,当使用 nm 检查时,构造函数定义在库中出现两次。这是由于 Itanium C ABI,它需要多个构造函数条目来支持多态性。

构造函数的损坏名称表明了它们的用途:

  • C1:完整的对象构造函数
  • C2:基础对象构造函数

即使类可能没有虚拟基类由于 ABI 对多态性的支持,GCC 发出了两个构造函数。这种行为在 GCC 中被认为是一个已知问题,当不涉及多态性时,编译器可能会优化这种行为。

不同类型的构造函数具有以下含义:

  • 完整对象构造函数:构造整个对象,包括虚拟基类类。
  • 基对象构造函数:创建对象本身并初始化数据成员和非虚拟基类。
  • 分配对象构造函数:不常见,执行完整对象构造函数的操作,并使用运算符另外分配内存new。

虽然构造函数符号的这种双重发射通常不会引起问题,但在使用 nm 等工具检查库符号时可能会导致混乱。

以上是为什么 C 库中有两个构造函数符号?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn