编译器和链接器如何处理类和函数

时间:2017-11-19 13:48:56

标签: c++ templates linker compilationunit

有人可以帮我理解,为什么我可以在两个不同的编译单元中使用相同的类而不会遇到链接器错误但在不同的编译单元中没有相同的功能?

非常感谢提前。

2 个答案:

答案 0 :(得分:1)

通常链接器主要知道函数和变量(非成员变量)。

链接器关于类的信息通常与继承的实现有关。成员函数转换为常规函数,并带有其他隐式this参数。对成员的访问通常只是this指针的偏移量。

但是,如果你在类中添加继承,或者使用typeid或type_info,你可能会开始遇到很多种奇怪的行为。

答案 1 :(得分:1)

由于其方法(包括特殊成员,如默认ctor或operator =)中的一个定义错误具有相同的名称,因此两个编组单元中的同一类可能会导致格式错误。

我的特殊成员函数是内联隐式定义的,因此我们得到的格式错误,无需诊断即可。

由于这个原因,我的内存已损坏;两个具有相同名称和不同内存布局的矩阵类。