添加新成员到C++结构和向后兼容性

Sri*_*nth 3 c c++ backwards-compatibility

我有一个结构供别人使用,他们也依赖sizeof(struct S).下面是我的结构,

struct S{
   int  aVar1;
   void *ptr1;
}
Run Code Online (Sandbox Code Playgroud)

将来,我可能会添加新成员(现在还不确定),比如..

struct S{
   int  aVar1;
   void *ptr1;
   int aVar2;
   void *ptr2;
}
Run Code Online (Sandbox Code Playgroud)

我知道这打破了与依赖用户的向后兼容性sizeof.

为了避免这种情况,我计划在struct中添加一些可以在将来使用的虚拟指针.

struct S{
   int  aVar1;
   void *ptr1;
   void *dummyptr1;
   void *dummyptr2;
   void *dummyptr3;
   void *dummyptr4;
   void *dummyptr5;
   void *dummyptr6;
 }
Run Code Online (Sandbox Code Playgroud)

任何更好的解决方案请保持向后兼容性?

Bat*_*eba 5

不要这样做.

在结构中添加新成员甚至不安全,希望现有成员保持其当前的填充安排.C和C++标准都没有在这方面做出任何保证.

唯一安全的方法是从头开始构建新结构并添加新的API函数.

  • 但是在C++中,如果通过继承添加成员,则可以保证布局. (2认同)