第一眼看好像确实有点奇怪,public
还会改变类的对齐方式吗?在知乎上搜到了一个类似的问题,其中一个回答解释了基类是
POD(Plain Old Data)会使子类中的相应位置的 tail padding
不生效。但在我的记忆中,上面的 A 和 B 似乎都是
POD。查了 cppreference也没发现问题。于是又进入了垃圾时间。检查了很多其他的类的特性都没发现
A 和 B 有区别。
最后发现 GCC 用的 abi
规范使用的 2003 版的 ISO C++
标准,而这个版本里确实只有全非静态成员变量都是 public 的 B
是 POD,而 A 不是。