C++ 面试题
目录

C++17 中 std::variant 的用法?

· 约 4 分钟读完 · 第 133 / 181 章

推荐答案

本题详细解读

std::variant 简介

std::variant 是 C++17 引入的一个模板类,用于表示一个可以持有多种类型值的联合体。与传统的联合体(union)不同,std::variant 是类型安全的,并且可以存储非平凡类型(如 std::string)。

基本用法

  1. 定义 std::variant 对象:

    这里定义了一个 std::variant 对象 v,它可以持有 int 或 std::string 类型的值。

  2. 赋值:

    可以通过赋值操作将不同类型的值赋给 std::variant 对象。

  3. 访问值:

    使用 std::visit 来访问 std::variant 中的值。std::visit 接受一个可调用对象(如 lambda 表达式)和 std::variant 对象,并根据当前持有的类型调用相应的函数。

其他常用操作

  1. 检查当前持有的类型:

    使用 std::holds_alternative 可以检查 std::variant 当前持有的类型。

  2. 获取值:

    使用 std::get 可以获取 std::variant 中的值。如果当前持有的类型与请求的类型不匹配,会抛出 std::bad_variant_access 异常。

注意事项

  • std::variant 不能持有引用类型。
  • std::variant 默认情况下会使用第一个类型进行初始化。
  • std::variant 的大小是所有可能类型中最大的类型的大小加上一些额外的开销。