C++ 新版本特性 - C++14
参考资料
特性概览
变量模板
在C++14中:
- lambda表达式参数可以为auto类型,类似于函数模板;
- 可以对捕获列表的捕获变量“赋值”。
详情
<!-- @include: ./src/variable_templatescpp -->
别名模板
详情
<!-- @include: ./src/alias_templatescpp -->
泛型lambda和lambda初始化捕获
详情
<!-- @include: ./src/lamdbacpp -->
放松对constexpr函数的限制
C++11中的常量表达式函数:
- 函数体只有单一的return返回语句;
- 函数必须有返回值(不能是void函数)
- 在使用前必须有定义
- return返回语句表达式中不能使用非常量表达式的函数,全局数据,且必须是一个常量表达式
详情
<!-- @include: ./src/constexpr_funcpp -->
deprecated标记
C++14中增加了[[deprecated]]标记,可以修饰类、函数、变量等,当程序中使用了被其修饰的模块时,编译器会产生告警,提示用户该标记标记的内容将来可能会被废弃,尽量不要使用。
详情
<!-- @include: ./src/deprecatedcpp -->
二进制字面量和数位分隔符
详情
<!-- @include: ./src/literals_digitcpp -->
库相关
- std::make_unique
- C++11中没有std::make_unique,在C++14中实现了这个方法
- std::shared_timed_mutex和std::shared_lock
- C++14中通过std::shared_timed_mutex和std::shared_lock实现读写锁,保证多个线程可以同时读,但是写线程必须独立运行,写操作不能和读操作同时进行。
- std::integer_sequence
- 表示一个编译时的整数序列。在用作函数模板的实参时,能推导参数包Ints并将它用于包展开。
- std::exchange
- 使用new_value 替换 obj 的值,并返回 obj 的旧值。(右边替换左边,返回左边的初值);T 必须满足可移动构造 (MoveConstructible) 的要求。而且必须能移动赋值 U 类型对象给 T 类型对象。
详情
<!-- @include: ./src/std_exchangecpp -->
- std::quoted
- 用于给字符串添加双引号
详情
<!-- @include: ./src/std_funcpp -->
执行结果:
详情
<!-- @include: ./res/std_fun.txt