C++——各版本新特性
参考:https://www.cnblogs.com/yrm1160029237/p/14246166.html
C++ 11
- auto关键字
- decltype关键字
- nullptr字面值
- constexpr关键字
- for(declaration : expression)
- Lambda表达式
- initializer_list
- 标准库bind函数
- 智能指针shared_ptr,unique_ptr
- 右值引用&&
- STL容器std::array,std::forward_list,std::unordered_map,std::unordered_set
C++ 14
- 拓展了lambda表达式,更加泛型:支持auto
- 拓展了类型推导至任意函数:C11只支持lambda返回类型的auto
- 弃用关键字 [[deprecated]]
C++ 17
- 拓展了constexpr至switch if等:C++11的constexpr函数只能包含一个表达式
- typename 嵌套
- inline 内联变量
- 模板参数推导
- 元组类 std::tuple:std::pair实现两个元素的组合,它实现多个
- 类模板
std::variant
表示一个类型安全的联合体。 - 引用包装器 std::reference_wrapper
- 变长参数模板
- 结构化绑定(函数多值返回时用{}合成struct)
- 非类型模板参数可传入类的静态成员
- 在if和switch中可进行初始化
- 初始化(如struct)对象时,可用花括号进行对其成员进行赋值
- 简化多层命名空间的写法
- lambda表达式可捕获*this的值,但this及其成员为只读
- 十六进制的单精度浮点数
- 继承与改写构造函数
using B1::B1;//表示继承B1的构造函数
- 当模板参数为非类型时,可用auto自动推导类型
- 判断有没有包含某文件__has_include
- [[fallthrough]]用于switch语句块内,表示会执行下一个case或default
- [[nodiscard]]表示函数的返回值没有被接收,在编译时会出现警告。
- [[maybe_unused]]即便没使用也不警告
https://blog.csdn.net/qq811299838/article/details/90371604
C++ 20
- concept用于声明具有特定约束条件的模板类型
// 声明一个数值类型的concept
template<typename T> concept number \= std::**is\_arithmetic**<T>::value;
- 范围库(Ranges Library)
- 协程(Coroutines)
- 模块(modules)