【C++】C++14

最新的C++标准为C++14,即ISO/IEC14882:2014,从一开始的C++98到后来的C++03、C++11,以及若干年后的C++17,对广大C++爱好者来说,每一次的版本提升无疑是一种福音,那就一起拥抱最新的C++技术,共创属于C++的辉煌时代。

C++14主要是对C++11的一个扩展,熟悉C++11的小伙伴们想必不会对C++14的新特性感到陌生,还是先总结一下吧,方便以后使用。

新的语言特性——

1、lambda
原型如下:
[capture] (params) mutable exception attribute - > ret {body}
(1)capture在C++11中捕获的是已在外层作用域声明的变量,而在C++14中可以任意声明lambda的成员,且可以用任意的表达式初始化。
(2)params在C++11中需要被声明为具体的类型,而在C++14中可以使用类型说明符auto。

2、类型推导
(1)在C++11中,lambda函数可以根据return语句的表达式类型推导返回类型,有后置返回类型说明符;而在C++14中,一般的函数也有这个特性,函数声明必须将auto作为返回类型,但没有后置返回类型说明符。
(2)auto和decltype()是C++11引入的两种推导类型的方式,decltype()需显式地指定其参数;而C++14增加了decltype(auto)的语法,也就不必显示地指定其参数了。

3、constexpr
C++11引入了constexpr关键字,可以修饰函数、变量,有点像const,但用法不同;C++14对constexpr进行了扩展,取消了一些被限制的用法。

4、变量模板
传统的C++模板可以是函数模板或类模板,C++11引入了模板别名,需用到using关键字而不是typedef,C++14则带来了变量模板。

5、初始化
C++11引入了大括号初始化成员变量的方法,C++14则对这一初始化方法进行了扩展,当花括号初始化列表没有提供某成员变量的值时会被自动初始化。

6、二进制字面量
C++14的数字可以用二进制形式指定,其前缀为0b或0B。

7、数字分位符
C++14引入了单引号来作为数字分位符,增强了数字可读性。

新的标准库特性——

1、共享的互斥体
std::shared_timed_mutex

2、关联容器的异构查找
C++标准库定义了四个关联容器类,map、set、multimap、multiset,查找时只能接收指定类型的参数,C++14允许通过其它类型进行查找,只需要这个类型和实际的键类型之间可以进行比较操作。

3、标准自定义字面量
C++11增加了自定义字面量的特性,使用户能够定义新的字面量后缀,但标准库并没有对这一特性加以利用,C++14标准库定义了以下字面量后缀:
“s”,用于创建各种std::basic_string类型。
“h”、“min”、“s”、“ms”、“us”、“ns”,用于创建相应的std::chrono::duration时间间隔。

4、通过类型寻址多元组
C++11引入的std::tuple类型允许不同类型的值的聚合体用编译器整型常数索引,C++14还允许使用类型代替常数索引,从多元组中获取对象,若多元组含有多于一个这个类型的对象,将会产生一个编译错误。

5、其它
std::make_unique可以像std::make_shared一样使用,用于产生std::unique_ptr对象。
std::integral_constant增加了一个返回常量值的operator()重载。
全局std::begin/std::end函数之外,增加了std::cbegin/std::cend函数,它们总是返回常量迭代器。


你可能感兴趣的:(编程语言,C++,C++14)