本专栏用来介绍C++新特性,其中包括C++11、C++14、C++17、C++20的特性。
下面是C++各个版本的出现时间:
C++版本 | 时间 |
C++11 | 2011~2013 |
C++14 | 2014~2016 |
C++17 | 2017~2019 |
C++20 | 2020~2022 |
C++23 | 2023~ |
接下来特性更新的顺序不会按照书中的目录,而是按照特性出现时间和是否常用的顺序更新。
C++11新特性
- lamada表达式(11~20)
- 列表初始化(11、20)
- 默认和删除函数
- 强枚举类型(11、17、20)
- override和final说明符
- 基于范围的for循环(11、17、20)
- 内联和嵌套命名空间(11~20)
- auto占位符(11~17)
- decltype说明符(11~17)
- 右值引用(11、17、20)
- 非静态成员默认初始化(11、20)
- 指针字面量nullptr(11)
- 非受限联合类型
- 委托构造函数
- 继承构造函数
- static_assert声明
- noexcept关键字(11~20)
- 类型别名和别名模版(11、14)
- 线程局部存储
- 常量表达式(11~20)
- 基础特性的其他优化(11~20)
- alignas和alignof(11、17)
- 字面量优化(11~17)
- 属性说明符和标准属性(11~20)
- 可变参数模版(11、17、20)
- 模版参数优化(11、17、20)
- SFINAE
- 模版特性的其他优化(11、14)
- 函数返回后置类型
- 新基础类型(11~20)
C++ 17新特性
- 扩展的聚合类型(17、20)
- 支持初始化语句的if和switch
- 结构化绑定(17、20)
- 扩展的inline说明符
- 确定的表达式求值顺序
- typename优化(17、20)
- 类模版的模版实参推导(17、20)
- 用户自定义推导指引
C++20新特性
- 三向比较
- 新增预处理和宏(17、20)
- 协程
- 概念和约束
(考虑到新特性给项目代码安全性和稳定性带来的波动,项目组目前用的比较多的还是C++11,并且只涉及我标黑的几个特性。虽然自C++11出世已经12年了,自己对于大多数的特性并不熟悉)