即使在派生类中进行了涉及虚拟的其他更改,类 View 的ABI也会保持稳定吗?
也就是说,我有一个接口(interface)InterfaceA
(具有许多纯虚拟功能的抽象类)和一个从其继承的类DerivedB
。我编写了一个具有InterfaceA *
函数的库。我想知道的是,只要接口(interface)本身不变,接口(interface)是否仍保持二进制兼容性。
清楚,如果我修改InterfaceA
,我不希望代码是二进制兼容的。但是,如果我只是修改DerivedB
,该说我继承了更多接口(interface)或添加了其他虚函数呢?最极端的说法是,我从另一个定义InterfaceA
的类继承。尽管进行了所有这些更改,但InterfaceA
是否仍保持二进制兼容性?
到目前为止,我的假设和经验是可以的。我只是在寻找对此的确认(如果不兼容,请驳斥)。
注意:我不在乎动态类型或其他类型转换,我只在乎接口(interface)函数本身。
另请注意:假设所使用的编译器版本总体上是ABI稳定的-没有重大版本更改。
最佳答案
是的,只要InterfaceA中虚拟函数的名称,参数和顺序不变,它将保持二进制兼容。请注意,这允许您在类声明的末尾添加函数。
(这可能不是C++规范未明确保证的,但是COM依赖于此,因此大型C++编译器将以这种方式工作。)
关于c++ - 接口(interface)(抽象类)与其他虚拟更改的ABI兼容性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7398902/