聯合

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

  • 根據 C++標準,未定義的行為是訪問不是最近修改過的成員的 union 的元素。雖然很多 C++編譯器都以明確定義的方式允許這種訪問,但這些是擴充套件,並且不能在編譯器之間得到保證。

    一個 std::variant (因為 C++ 17)就像是一個聯合,只有它告訴你什麼目前,它包含(其可視狀態的一部分,是它擁有在給定時刻的值的型別:它強制值只能訪問發生在該型別)。

  • 實現不一定將不同大小的成員對齊到同一地址。