在 GCC 编译的代码中,没有虚拟基类的类的构造函数可能会在库中出现重复列表,引发有关此行为背后原因的疑问。详细来说,Itanium C ABI 为 C 符号定义了一组命名约定,包括构造函数。
让我们检查一下这些构造函数的损坏名称:
如您所见,构造函数通过 C1(完整对象构造函数)进行区分和 C2(基础对象构造函数)后缀。
这种二元性源于多态性支持,尽管在本例中并不是严格要求的。完整的对象构造函数还初始化虚拟基类,而基对象构造函数初始化数据成员和非虚拟基类。
尽管库列表中有多个条目,但这些重复的构造函数确实不会导致“符号 __ 的多重定义”错误。这是因为 ABI 为每个构造函数类型提供了唯一的重整名称,确保链接器将它们视为不同的符号。
GCC 编译代码中构造函数符号的双重发射是多态性支持和 Itanium C ABI 命名约定的结果。理解这些概念可以阐明此行为背后的原因,并解决有关多个定义的任何问题。
以上是为什么没有虚拟基类的类的构造函数在 GCC 编译的代码中出现重复?的详细内容。更多信息请关注PHP中文网其他相关文章!