std::any 是 C++17 引入的运行时类型安全泛型容器,可持有任意可复制类型的单个值,通过类型擦除实现,需用 std::any_cast 显式访问,支持空状态和移动语义。

std::any 是 C++17 引入的一个类型安全的泛型容器,它能**在运行时持有任意可复制(CopyConstructible)类型的单个值**,并且支持类型检查与安全访问。
std::any 不是模板类(不像 std::variant 或 std::optional 那样需编译时确定类型),而是一个具体类型。它内部使用类型擦除技术,把实际值及其类型信息一起封装起来。这意味着:
std::bad_any_cast;has_value() 判断是否含有效值。典型操作分三步:构造/赋值 → 检查类型 → 安全转换。
std::any a = 42; 或 a = std::string("hello");
if (a.type() == typeid(std::string)) { ... } 或更常用 a.has_value()
int x = std::any_cast<int>(a);</int>(成功);std::any_cast<double>(a)</double> 会抛异常注意:std::any_cast<t>(a)</t> 要求 T 与内部存储类型完全一致(包括 const/volatile 限定符),不支持隐式转换。
立即学习“C++免费学习笔记(深入)”;
std::any 适合需要“暂存未知类型数据”的上下文,比如:
但它不是万能替代品:性能开销(堆分配+RTTI)、无编译期类型约束、易出错(cast 失败)。若类型集合有限且已知,std::variant 更高效安全;若只是可选值,std::optional 更轻量。
type() 做复杂逻辑分支,优先用 std::any_cast 的异常机制或封装成访问器函数;本质上,std::any 提供的是“运行时类型安全的单值盒子”,关键在于明确谁负责类型管理、何时校验、如何容错。
以上就是c++++的std::any是什么 可以容纳任意类型的安全容器【详解】的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号