use*_*817 14 c++ struct sizeof unions
编译我的代码为C++ 11 gcc 4.8.2和llvm/clang 3.4在Fedora Linux的,我得到了奇怪的结果,我真的无法解释...这里是一个类似的计划的Fedora.
#include <iostream>
using namespace std;
struct A {};
struct C {};
struct B1 : A { union { A a;}; };
struct B2 : A { union { C c;}; };
int main()
{
cout << sizeof(B1) << " " << sizeof(B2) << endl;
}
Run Code Online (Sandbox Code Playgroud)
sizeof(B1) = 2 和 sizeof(B2) = 1
但为什么尺寸不同?实际上我有一个"为什么"的想法,但我想找到确切的解释或C++规则.
在B1孩子有两个家长和类型的子对象A.相同类型的两个不同对象不能存在于同一地址,并且union分别包含A父对象的附加对象A.
使用时B2,空基础优化允许空A父母和C成员共享子项的单个地址.