即使在派生类中进行了涉及虚拟的其他更改,类视图的 ABI 是否保持稳定?
也就是说,假设我有一个接口InterfaceA
(具有许多纯虚函数的抽象类)和一个DerivedB
从它继承的类。我编写了一个库,该库具有采用InterfaceA *
. 我想知道的是,只要接口本身不改变,接口是否保持二进制兼容。
清楚,如果我修改InterfaceA
我不希望代码是二进制兼容的。但是,如果我只是修改DerivedB
,比如说我继承更多接口或添加其他虚拟功能。在最极端的情况下,我从另一个定义InterfaceA
. 尽管有所有这些变化,是否InterfaceA
仍保持二进制兼容?
到目前为止,我的假设和经验是,是的,它是兼容的。我只是在寻找对此的确认(如果不兼容,则进行反驳)。
注意:我不关心动态类型或其他类型转换,我只关心接口函数本身。
另请注意:假设正在使用的编译器版本整体上是 ABI 稳定的——没有主要版本更改。