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
成员共享子项的单个地址.