标准变体

Variant 是原始 union 使用的替代品。它是类型安全的并且知道它是什么类型,并且它应该在它应该的时候仔细地构造和销毁它内部的对象。

它几乎从不是空的:只有在更换其内容的角落情况下才会安全退出并最终处于空状态。

它的行为有点像 std::tuple,有点像 std::optional

使用 std::getstd::get_if 通常是一个坏主意。正确的答案通常是 std::visit,它可以让你在那里处理每一种可能性。if constexpr 可以在 visit 中使用,如果你需要分支你的行为,而不是做一系列运行时检查,复制 visit 将更有效地做什么。