联合

联合是非常有用的工具,但有一些重要的警告:

  • 根据 C++标准,未定义的行为是访问不是最近修改过的成员的 union 的元素。虽然很多 C++编译器都以明确定义的方式允许这种访问,但这些是扩展,并且不能在编译器之间得到保证。

    一个 std::variant (因为 C++ 17)就像是一个联合,只有它告诉你什么目前,它包含(其可视状态的一部分,是它拥有在给定时刻的值的类型:它强制值只能访问发生在该类型)。

  • 实现不一定将不同大小的成员对齐到同一地址。