C++ 更改联合时的ABI兼容性
我想知道,向C++ 更改联合时的ABI兼容性,c++,abi,C++,Abi,我想知道,向联合添加值是否会破坏我的库的二进制兼容性 在我的公共标题中定义了以下类: class myClass{ public: myClass(); ~myClass(); int a; private: int b; union data{ uint8_t x; uint8_t y; uint8_t z; } } 现在我想添加一个uint8\u t w给我的工会。它不会改变类的大小,尽管我希望它不会打破ABI。但我对此不确定 关于这
联合添加值是否会破坏我的库的二进制兼容性
在我的公共标题中定义了以下类:
class myClass{
public:
myClass();
~myClass();
int a;
private:
int b;
union data{
uint8_t x;
uint8_t y;
uint8_t z;
}
}
现在我想添加一个uint8\u t w代码>给我的工会。它不会改变类的大小,尽管我希望它不会打破ABI。但我对此不确定
关于这一点没有太具体(或者我遗漏了一些东西)。看起来您将破坏ODR:“ODR使用的每个非内联函数或变量(见下文)都需要一个且只有一个定义出现在整个程序中…”直到库的所有用户使用更新的定义重新编译。@RichardCriten二进制兼容性远远超出标准范围,因为根据这个定义,任何修改都会破坏兼容性。@Quentin我的想法是——如果你在未定义的行为领域——二进制可比性仍然是一个问题,因为不可能存在guarantees@RichardCritten绝对是。没有什么是由C++标准保证的,这是真的,但是一个特定的实现可以很好地定义标准未定义的内容。ABIs确实如此,尽管我现在注意到OP忘记了提到他们具体使用的是哪一个。@AndreiDamian你能为此链接到任何源吗?看起来你将破坏ODR:“ODR使用的每个非内联函数或变量都只有一个定义(见下文)必须出现在整个程序中…”直到库的所有用户使用更新的定义重新编译。@RichardCriten二进制兼容性远远超出了标准的范围,因为根据这个定义,任何修改都会破坏兼容性。@Quentin我的想法是——如果你在未定义的行为领域——二进制可比性仍然是一个问题,因为不可能存在guarantees@RichardCritten绝对是。没有什么是由C++标准保证的,这是真的,但是一个特定的实现可以很好地定义标准未定义的内容。ABIs的情况确实如此,尽管我现在注意到OP忘了提到他们具体使用的是哪一个。@AndreiDamian你能链接到任何来源吗?