C++11新特性集锦——新关键字

本文聚焦C++11新引入的关键字,包括auto、decltype简化类型声明,=default、=delete、override、final用于类设计,nullprt提供更安全的空指针,constexpr确保编译期常量,以及noexcept优化异常处理。这些特性增强了代码效率和可读性。
摘要由CSDN通过智能技术生成

C++11新引入的特性比较多,这里简单记录下每个特性的大致情况,无法将细节一一描述清楚——那样每个特性几乎都要花费一篇博客的篇幅来记录。本文从新增的关键字新增的语义新增的标准库三个方面来记录这些新特性。原本打算将这三部分放到一篇博客中,后来发现太长了,还是分开吧。

0,重点特性概览

个人觉得,auto、统一的初始化(使用“{}”)、右值引用、lambda是C++11里面重量级的四个特性了,auto简化了各种标识符的声明,大括号统一了初始化代码的形式,右值引用作用下的移动语义大大改善了代码性能,lambda表达式则令代码更加简洁,lambda定义在函数体内可以使代码可读性提高很多、封装也更符合日常思维。当然其他特性诸如可变参数模板多线程库等也值得大书特书,但由于个人水平有限,只能将诸多特性做一些浅显的记录,谓之“集锦”。

1,新增的关键字

1.1 auto、decltype

事实上,在C++98里已经使用过auto关键字,用来表示一个变量拥有自动的生命周期,但是平时基本用不到,C++11标准就把旧版的这个作用废除了,将auto用作自动类型推断。
auto的引入大大减少了代码的长度——让编译器自己推断标识符的类型而不是人工指定,大多数情况下,编译器是清楚地知道标识符的具体类型的。

vector<int> arr;
......
vector<int>::iterator it = arr.begin();
auto it2 = arr.begin();//比上面的代码简直爽太多了。

不过,auto的引入也有小小的不利——牺牲了代码的一部分可读性,例如:

auto value = myFunction();

编译器会清楚地知道value的类型,但程序员不一定——除非看一下myFunction的函数声明。但总的来说,利是远远大于弊的。
当我们用一个值或者表达式来初始化一个变量时,可以用auto声明该变量,编译器会自动推断出它的类型,但有些时候,我们不想用一个值或者表达式初始化变量——只想用值的类型来声明一个变量,此时就可以用decltype关键字了,它能够提取变量或者表达式的类型:

//value的类型是myFunction的返回值的类型,此处并不会真正执行myFunction
decltype(myFunction()) value;

值得注意的是,decltype推断的结果与表达式的形式密切相关:假如表达式外层有一层或多层小括号,得到的将是引用类型:

int a = 10;
decltype(a) b; //正确,b的类型是int,b未被初始化。
decltype((a)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值