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



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

提前非常感谢。

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

我的特殊成员函数是内联隐式定义的,因此我们很容易得到格式错误的程序,不需要诊断。

因此,我的内存损坏了;两个具有相同名称和不同内存布局的矩阵类。

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

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

但是,如果您向类添加继承,或者使用 typeid 或 type_info您可能会开始遇到许多奇怪的行为。

最新更新