std::optional是17标准中增加的管理可选值的类模板,以往经验中如果某个函数的返回值可能失败,如何判断这个失败值和传递这个失败值都需要些额外的手段,optional的出现则很好的解决了这个问题。以下是gcc13版本中std::optional源码的个人解析:
std::optional实现内各类型关系
optional
首先是optional模板声明及内部别名:
std::optional是17标准中增加的管理可选值的类模板,以往经验中如果某个函数的返回值可能失败,如何判断这个失败值和传递这个失败值都需要些额外的手段,optional的出现则很好的解决了这个问题。以下是gcc13版本中std::optional源码的个人解析:
首先是optional模板声明及内部别名:
std::string_view
是自17标准引入的轻量级只读字符串视图,用于进一步减少字符串参数传递时的内存拷贝。
string_view
与string
类似,同样是一个别名,实际类型为basic_string_view<char>
,<string_view>中声明:
std::array为11标准中带来的可以替代C风格数组的聚合类型,可以通过聚合初始化生成"C++风格"上的"C风格"数组:
1 | std::array<int, 3> a = {1, 2, 3}; |
主要代码如下:
废话不多说直接看源码,以下基于gcc13版本shared_ptr实现
继上次14标准小结过了三年多…难道我这系列博客也要和标准一样三年一个吗😂,眼见23标准都出完了,我也该加速了,废话不多说,开始17标准语言特性改动:
在以往标准中inline关键字通常是做为编译器进行内联函数替换的指示器,优化不必要的函数调用而使用的,但比较容易忽略的是inline函数还有指示“允许多次定义”的功能,