通八洲科技

c++中的std::variant怎么用_c++类型安全的联合体【C++17】

日期:2026-01-02 00:00 / 作者:冰火之心
std::variant 是 C++17 引入的类型安全联合体,支持在单个对象中存储多种类型之一,自动管理生命周期并强制类型检查;定义时指定允许类型,通过 std::get、std::holds_alternative 或 std::visit 安全访问,不支持引用、数组等特定类型,且禁止重复类型。

std::variant 是 C++17 引入的类型安全联合体,它能在一个对象中存储多种不同类型之一,同时避免传统 union 的手动内存管理和类型不安全问题。

基本用法:定义、构造和访问

你可以把 std::variant 看作“可变的容器”,但它不装多个值,只存一个——且明确知道当前存的是哪种类型。

安全访问:std::visit 和访问者模式

最推荐的访问方式是 std::visit,它支持对不同类型的统一处理,且编译期检查全覆盖:

常见操作与注意事项

std::variant 不是万能替代,用对场景才发挥价值:

立即学习“C++免费学习笔记(深入)”;

对比传统 union:为什么更安全?

原生 union 只管共享内存,不管类型生命周期:

基本上就这些。它不是要取代 class 继承或多态,而是为“有限、已知、异构”的数据建模提供轻量、高效、类型安全的方案。