在独立类中重新排序公共非虚拟方法会破坏ABI吗?

Víc*_*dez 11 c++ backwards-compatibility abi

在独立类中更改公共非虚拟非内联重载方法的顺序是否会破坏ABI?

之前:

class MyFinalClass
{
public:
    // ...
    void doSomething(char c, int i, int n);
    void doSomething(char c, int i);
    // ...
};
Run Code Online (Sandbox Code Playgroud)

后:

class MyFinalClass
{
public:
    // ...
    void doSomething(char c, int i);
    void doSomething(char c, int i, int n);
    // ...
};
Run Code Online (Sandbox Code Playgroud)

谢谢!

Mar*_*som 10

这些功能通过名称和签名来链接,而不是它们在班级中的位置.所以不,你没有打破ABI.

虚函数是另一回事,因为它们是通过它们在vtable(通常)中的位置链接的.如果您始终重新编译依赖于定义顺序的标头的每个文件,这将不会成为问题,但如果该类存在于库中,则可能是一个问题.