C++ 面试题
目录

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

· 约 3 分钟读完 · 第 134 / 181 章

推荐答案

本题详细解读

std::any 概述

std::any 是 C++17 引入的一个类型安全的容器,可以存储任意类型的值。它类似于 void*,但提供了类型安全性。std::any 可以存储任何可复制的类型,并且在运行时可以检查存储的类型。

主要成员函数

  1. std::any::any(): 默认构造函数,创建一个空的 std::any 对象。
  2. std::any::any(const T& value): 构造函数,存储一个给定类型的值。
  3. std::any::operator=(const T& value): 赋值操作符,用于存储或替换 std::any 中的值。
  4. std::any_cast<T>(std::any& any): 将 std::any 中的值转换为类型 T。如果类型不匹配,抛出 std::bad_any_cast 异常。
  5. std::any::type(): 返回存储值的类型信息,类型为 std::type_info。
  6. std::any::has_value(): 检查 std::any 是否包含值。
  7. std::any::reset(): 清空 std::any 对象,使其不再包含任何值。

使用场景

std::any 适用于需要在运行时动态存储和检索不同类型值的场景。例如,在实现插件系统、配置管理或动态类型系统时,std::any 可以简化代码并提高类型安全性。

注意事项

  • 使用 std::any_cast 时,必须确保类型匹配,否则会抛出异常。
  • std::any 存储的值必须是可复制的。
  • std::any 不适用于存储引用类型。

通过 std::any,C++ 程序员可以在不牺牲类型安全性的情况下,灵活地处理多种类型的数据。