Остается ли стабильным ABI представления класса, даже если в производный класс внесены другие изменения, включая виртуальные?
То есть, скажем, у меня есть интерфейс InterfaceA
(абстрактный класс смного чистых виртуальных функций) и класс DerivedB
, который наследуется от него.Я пишу библиотеку, которая имеет функцию, принимающую InterfaceA *
.Что я хочу знать, так это то, остается ли интерфейс двоичным совместимым, пока сам интерфейс не меняется.
Очистите, если я изменю InterfaceA
, я не ожидаю, что код будет двоичным совместимым.Однако, что если я просто изменю DerivedB
, скажем, я наследую больше интерфейсов или добавлю другие виртуальные функции.В крайнем случае я умножаю наследовать от другого класса, который определяет InterfaceA
.Остаётся ли InterfaceA
бинарно-совместимым, несмотря на все эти изменения?
Мое предположение и опыт на данный момент таковы, что да, он совместим.Я просто жду подтверждения этого (или опровержения, если оно несовместимо).
Примечание: меня не волнует динамическая типизация или другие типы преобразования, меня интересуют только сами функции интерфейса.
Также обратите внимание: предположим, что используемые версии компилятора стабильны в целом как ABI - без существенных изменений версии.