变体(any-variant、templated-variant 和 optional-value)有时被统称为“新词汇类型”。

Any-Variant
类型为 std::any变量 xVar 可以在不同的时间存储不同类型的值。例如,在赋值 xVar = 1.1F; 后,可以通过 std::any_cast<float>(xVar); 访问这个 float 值。未初始化any 变量将处于一个特殊的“无值”状态,这可以通过 xVar.has_value() 来检查。

Templated-Variant
类型为 std::variant<int, float, std::string>变量 xVar 可以存储一个值,该值可以是 intfloatstd::string(一次只能存储其中一个选项)。因此,这种模板变体变量是C语言中联合体(union)的现代替代品。在赋值 xVar = 9.9F; 后,你可以知道该变量当前存储的是 float 类型,因为 std::holds_alternative<float>(xVar) 返回 true,并且 xVar.index() 返回 1(基于 0 的类型选项索引)。可以通过 std::get<float>(xVar)std::get<1>(xVar) 来访问该值。

Optional-Value
类型为 std::optional<int>变量类似于指向 int指针,因为它的值可能是 std::nullopt(类似于空指针)。在这种情况下,我们可以语义上理解为该变量“没有有意义的值”。否则,可以通过赋值存储一个 int,并通过解引用访问该值。

最后修改: 2025年01月17日 星期五 22:02