![]() |
1
2
这是未定义的行为:类定义定义了相同的类类型,因此它们必须是相同的。对于链接器,这意味着它可以选择一个任意定义作为发出的定义。 如果希望它们是分离的类型,则必须将它们嵌套到未命名的命名空间中。这将导致该命名空间中的任何内容对于该翻译单元都是唯一的:
是的,对于内联函数(类定义中定义的函数是内联的,即使没有显式地声明为内联的),同样的原则也适用:它们可以在程序中定义多次,并且程序的行为就像它只定义一次一样。对链接器来说,这意味着它可以放弃除一个定义之外的所有定义。它选择哪一个是未指明的。 |
![]() |
2
0
链接器处理损坏的名称。 请看这里: http://en.wikipedia.org/wiki/Name_mangling
因此,正如约翰内斯所说,这种行为是不明确的,但细节可能会被澄清:
但是,如果名称隐藏在名称空间中,并且与另一个翻译单元中的同一个名称重叠(正如您所发现的那样),则链接器不会抱怨。它只使用一个符号。
我认为,它没有被指定,并且对于任何编译器/链接器都是特定于实现的。 |
![]() |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
![]() |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
![]() |
rainer · 后台插入程序的初始化 1 年前 |
![]() |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
|
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |