01
C++20的一些新特性
在往期文章中,我们介绍了C++20中的概念、范围、模块、协程等新特性,那么C++20中还有什么新的特性呢?
1.1 lamda表达式
对于模板形式的lamda表达式,C++14中允许了泛型lamda表达式,让编译器自动推导类型和返回参数:
![79f38c4a6f7bd4a2d2e746272ee9783c.png](https://i-blog.csdnimg.cn/blog_migrate/b438b49c510f8ea891aa2aaf3bb847b5.png)
而C++20中进一步,允许了模板形式的lambda表达式:
![2e2824a573cf946134bc00e035a50bf5.png](https://i-blog.csdnimg.cn/blog_migrate/f4d88ec31598a49ea652bdd9216c254c.png)
有了模板形式的lamda表达式之后,获取参数类型、类参数中的成员等特性就会更为直观自然:
![83590873d1e6fda6b13291156563c16c.png](https://i-blog.csdnimg.cn/blog_migrate/d87713fca8d98f74251478a80b31329b.png)
![c0194912cb0226d865c6da2a5ff0fe08.png](https://i-blog.csdnimg.cn/blog_migrate/cc914be7592b24b229dbfe6dd22425a5.png)
![4fbf7f721a33466a594b52673541b888.png](https://i-blog.csdnimg.cn/blog_migrate/067a0df036791232d07a9b6d6e6f396f.png)
1.2 原子(Atomic)智能指针:
智能指针(shared_ptr)的线程安全性
引用计数控制单元线程安全, 保证对象只被释放一次。
但对于数据的读写没有线程安全,需要使用mutex控制智能指针的访问或使用全局非成员原子操作函数访问,诸如: std::atomic_load(), atomic_store(), …
在C++20中,提供了原子智能指针,来保证智能指针的安全:
![f01ca6bc77e470c8ebfac81177a7afb4.png](https://i-blog.csdnimg.cn/blog_migrate/a3685d0d48bd1d4fa6935e7caf168b54.png)
![6cbf415a34e816dacf063a8c4e8d9570.png](https://i-blog.csdnimg.cn/blog_migrate/e5625edd31f98cdc38503513cf92297a.png)
1.3 同步(Synchronization)库
![dc81dca3270335f5cd6b2973ebbe98c9.png](https://i-blog.csdnimg.cn/blog_migrate/046204fd327f0ab8cbb54b18455d81f4.png)
![2cc45b1aea9500f436852d94ce2f9334.png](https://i-blog.csdnimg.cn/blog_migrate/3814351db24dbd49c21e841ba6da6708.png)
02
Boost库
2.1 什么是Boost库:
Boost库是为C++语言标准库提供扩展的一些C++程序库的总称,由Boost社区组织开发、维护。Boost库可以与C++标准库完美共同工作,并且为其提供扩展功能。Boost库是一个优秀、可移植且开源的C++库,在C++社区影响很大,是不折不扣的“准”标准库。Boost包含了不少工具类,可以完成比较具体的工作。
2.2 Boost库包含什么内容:
按照实现的功能,Boost可为大致归入20个分类,有些库同时归入几种类别。
1)字符串和文本处理库:如Format库(实现类似printf的格式化对象,可以把参数格式化到一个字符串,而且是完全类型安全的)、IOStream库(扩展C++标准库流处理,建立一个流处理框架)、Lexical Cast库(用于字符串、整数、浮点数的字面转换)等。
2)容器库:如Array 库(对C语言风格的数组进行包装)、Bimap 库(双向映射结构库)等
3)迭代器库:如GIL 库(通用图像库)、Graph 库(处理图结构的库)等。
4)算法库:如Foreach库(容器遍历算法)、GIL库(通用图像库)等。
5)函数对象和高阶编程库:如(Bind库:绑定器的泛化,已被收入TR1)、Function库(实现一个通用的回调机制,已被收入TR1)等。
另外还有泛型编程库、模板元编程库、预处理元编程库、并发编程库、数学和数字库、数据结构库、图像处理库等分类。
2.3 Boost库与C++标准变化之间有什么关系:
Boost社区建立的初衷之一就是为C++的标准化工作提供可供参考的实现,Boost社区的发起人Dawes本人就是C++标准委员会的成员之一。在Boost库的开发中,Boost社区也在这个方向上取得了丰硕的成果。在送审的C++标准库TR1中,有十个Boost库成为标准库的候选方案。在更新的TR2中,有更多的Boost库被加入到其中。从某种意义上来讲,Boost库成为具有实践意义的准标准库。
下图部分展示了C++11标准中对Boost库的吸收情况。
![002d0eb3e6a5c6a8a8808319ae932b72.png](https://i-blog.csdnimg.cn/blog_migrate/044c6ed9b33ea26bff50d17254bebaac.png)
03
总结
总的来说,今天清小c给大家介绍了C++20中的一些新特性以及Boost库,你们明白了吗?
参考资料:
林砺宗,宋启盛,林森,王启春. 基于BOOST库的数控NC代码宏程序编译器. 《 CNKI;WanFang 》 , 2010
许志海,张昭云,丁雅莉. 开源Boost库在地理网络分析中的应用. 《 CNKI;WanFang 》 , 2010
CSDN社区博文《C++20中的新特性》
CSDN社区博文《C++11的新功能特性对Boost库影响》
编辑:任若寒
审核:刘政宁、姚炫容
指导老师:李超
![eb1089c1a3c2d027d635971782c107e4.png](https://i-blog.csdnimg.cn/blog_migrate/a0c1e4b395ce22e90c91706f171eccca.jpeg)