行业知识
C++三剑客之std::any(二) : 源码剖析
2026-11-09 02:07:52
来源:互联网转载
目录
1.引言
2.std::any的存储分析
3._Any_big_RTTI与_Any_small_RTTI
4.std::any的构造函数
4.1.从std::any构造
4.2.可变参数模板构造函数
4.3.赋值构造与emplace函数
5.reset函数
6._Cast函数
7.make_any模版函数
8.std::any_cast函数
9.总结
1.引言
C++三剑客之std::any(一) : 使用详解_c++ std::any-CSDN博客
在前面详细的讲解了std::any的用法,std::any能够容纳任何可拷贝构造类型的数据,我们不禁会想它是怎么做到的呢?不同类型怎么做到巧妙的构造与转换的?多种构造函数如何实现?内部数据怎么储存?为什么分Big,Samll,trivial?
下面就以vs2019的std::any实现为例进行具体分析它的实现。
2.std::any的存储分析
std::any 将保存内容的内存形式分为了三种:_Small、_Trivial、_Big
划分规则代码为:
// size in pointers of std::function and std::any (roughly 3 pointers larger than std::string when building debug)constexpr int _Small_object_num_ptrs = 6 + 16 / sizeof(void*); //64位系统: 8//64位系统:_Any_trivial_space_size = 56inline constexpr size_t _Any_trivial_space_size = (_Small_object_num_ptrs - 1) * sizeof(void*);template inline constexpr bool _Any_is_trivial = alignof(_Ty)
上一篇:微餐饮怎么注册公司?
下一篇:mc服务器怎么提升网速?