Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 更改联合时的ABI兼容性_C++_Abi - Fatal编程技术网

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你能链接到任何来源吗?