这只是一个理论问题。我在COM世界中遇到了类似的问题,想知道这是否也适用于C ++世界。我也知道我可以通过Pimpl Idiom避免这个问题。

假设我有一个A类版本1。我将头文件和库文件提供给客户端。

然后,有一天,我通过添加一些功能(不是虚拟的也没有超载的)来更新A。 Class A现在是版本2。

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

我的理解是在新的库文件中,类A的大小和vtable不会更改。另外,由于未添加任何重载函数,因此客户端不会调用错误的函数。结果,不需要用户重新编译他们的代码。

这个假设有什么陷阱吗?

最佳答案

我知道没有陷阱。您所描述的概念称为二进制兼容性。

由于类A的版本2仍与类A的版本1二进制兼容(据我所知),因此不需要重新编译。 KDE Techbase文章具有一套不错的准则(包括示例),可以遵循这些准则来维护二进制兼容性。

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

关于c++ - 如果仅将非虚拟,非重载成员函数添加到类中,将要求用户重新编译吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6929648/

10-11 22:33
查看更多