如果只将非虚的、非重载的成员函数添加到类中,是否需要用户重新编译?

Would a user be required to re-compile, if only non-virtual, non-overloading member functions were added to a class?

本文关键字:用户 是否 新编译 编译 重载 成员 如果 添加 函数      更新时间:2023-10-16

这只是一个理论问题。我在COM世界遇到过类似的问题,想知道这是否也适用于c++世界。我也意识到我可以用痘痘习语来避免这个问题。

假设我有一个a类版本1。我将头文件和库文件发送给客户端。

然后有一天,我更新了A,增加了一些函数(这些函数不是虚拟的,也不是重载的)。A类现在是版本2。

假设版本2在与版本1相同的环境和设置下编译。

我的理解是在新的库文件中,类A的大小和变量表不会改变。此外,由于没有添加重载函数,客户端不会调用错误的函数。因此,用户不需要重新编译他们的代码。

这个假设有什么缺陷吗?

据我所知没有陷阱。你所描述的概念叫做二进制兼容性。

因为类A的版本2仍然与类A的版本1二进制兼容(据我所知),所以不需要重新编译。KDE Techbase文章提供了一组很好的指导方针(包括示例)来维护二进制兼容性。

http://techbase.kde.org/Policies/Binary_Compatibility_Issues_With_C + +