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

How does the compiler and linker handle classes and functions

有人可以帮助我理解,为什么我可以在两个不同的编译单元中拥有相同的 class 而不会出现链接器错误,但在不同的编译单元中却没有相同的功能?

非常感谢。

通常,链接器主要了解函数和变量(非成员变量)。

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

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

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

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

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