C++ 面试题 目录

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

推荐答案

-- -------------------- ---- -------
-------- -----
-------- ----------
-------- --------

--- ------ -
    -------- -----

    -- ------
    ---- - ---
    --------- -- ------- ---- - -- ------------------------ -- ----------

    -- -------
    ---- - ------------------- ---------
    --------- -- ------- ------- - -- -------------------------------- -- ----------

    -- ----
    -- ------------ -- -------------------- -
        --------- -- ----- -- - -------- -- ----------
    -

    -- -- --- --
    -------------
    -- ------------------- -
        --------- -- ----- -- ------- -- ----------
    -

    ------ --
-

本题详细解读

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++ 程序员可以在不牺牲类型安全性的情况下,灵活地处理多种类型的数据。

纠错
反馈