c++ - 在独立类中重新排序公共(public)非虚拟方法是否会破坏 ABI?

标签 c++ backwards-compatibility abi

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

之前:

class MyFinalClass
{
public:
    // ...
    void doSomething(char c, int i, int n);
    void doSomething(char c, int i);
    // ...
};

之后:

class MyFinalClass
{
public:
    // ...
    void doSomething(char c, int i);
    void doSomething(char c, int i, int n);
    // ...
};

谢谢!

最佳答案

函数通过它们的名称和签名链接,而不是通过它们在类中的位置链接。所以不,你没有破坏 ABI。

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

关于c++ - 在独立类中重新排序公共(public)非虚拟方法是否会破坏 ABI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10536896/

相关文章:

css - Modernizer JS 媒体查询检查。加载/卸载

android - 根据Native ABI生成多个Apk

linux - 如何避免二进制文件中的 STT_GNU_IFUNC 符号?

c++ - GCC ABI 兼容性

c++ - 如何使用 CMAKE 为交叉编译配置设置特定的 CMAKE_C_OUTPUT_EXTENSION?

c++ - 为什么默认成员值禁止使用花括号列表初始化?

c++ - 如何在任一轴的 std::vector<std::pair<int, int>> 上找到 std::max_element?

c++ - 设计问题——一个函数调用所有三个

ios - 试图让 iOS 13 项目与 iOS 12 兼容

ms-access - MS Access Runtime 2010 在安装了早期版本的 Access/Office 的系统上运行良好吗?