C 构造函数的双重符号 Itanium C ABI 指定构造函数的重整名称包含有关其类型和参数的信息。因此,在库中观察到的两个构造函数条目源于它们不同的构造函数类型: 完整对象构造函数(C1):此构造函数完全初始化对象,包括任何虚拟基类. 基础对象构造函数 (C2): 此构造函数初始化对象本身以及数据成员和非虚拟基类。 双重符号和多重定义错误 尽管有双重条目,但不会因使用而出现符号定义冲突C1 和 C2 后缀。 ABI 确保损坏的名称是唯一的,为以不同方式处理这两种构造函数类型提供编译器支持。 其他详细信息 在没有虚拟基的情况下类,完整的和基础对象构造函数是相同的,并且在充分优化的情况下符号可以别名为相同的代码。 需要双构造函数符号主要是由对多态性的支持驱动的,其中不同的对象可能继承不同的基类,需要专门的初始化。 此行为曾经显示在 c filt 输出中,但不再包含在内。