標準變體
Variant 是原始 union
使用的替代品。它是型別安全的並且知道它是什麼型別,並且它應該在它應該的時候仔細地構造和銷燬它內部的物件。
它幾乎從不是空的:只有在更換其內容的角落情況下才會安全退出並最終處於空狀態。
它的行為有點像 std::tuple
,有點像 std::optional
。
使用 std::get
和 std::get_if
通常是一個壞主意。正確的答案通常是 std::visit
,它可以讓你在那裡處理每一種可能性。if constexpr
可以在 visit
中使用,如果你需要分支你的行為,而不是做一系列執行時檢查,複製 visit
將更有效地做什麼。