《随笔十一》—— C++中的 “ C++ 11 新特性梳理 ”

 

在面试中,经常被问的一个问题就是:你了解C++11哪些新特性?一般而言,回答以下四个方面就够了:

“语法糖”:nullptr, auto自动类型推导,范围for循环,初始化列表, lambda表达式等

右值引用和移动语义

智能指针

C++11多线程编程:thread库及其相配套的同步原语mutex, lock_guard, condition_variable, 以及异步std::furture

“语法糖”

这部分内容一般是一句话带过的,但是有时候也需要说一些,比较重重要的就是auto和lambda。


auto自动类型推导


 

C语言也有auto关键字,但是其含义只是与static变量做一个区分,一个变量不指定的话默认就是auto。。因为很少有人去用这个东西,所以在C++11中就把原有的auto功能给废弃掉了,而变成了现在的自动类型推导关键字。用法很简单不多赘述,比如写一个auto a = 3, 编译器就会自动推导a的类型为int. 在遍历某些STL容器的时候,不用去声明那些迭代器的类型,也不用去使用typedef就能很简洁的实现遍历了。

auto的使用有以下两点必须注意:

auto声明的变量必须要初始化,否则编译器不能判断变量的类型。

auto不能被声明为返回值,auto不能作为形参,auto不能被修饰为模板参数

 

关于效率: auto实际上实在编译时对变量进行了类型推导,所以不会对程序的运行效率造成不良影响。另外,auto并不会影响编译速度,因为编译时本来也要右侧推导然后判断与左侧是否匹配。


关于具体的推导规则,可以参考这里 http://www.cnblogs.com/boydfd/p/4950334.html


lambda表达式


lambda表达式是匿名函数,可以认为是一个可执行体 functor,语法规则如下:

[捕获区](参数区){代码区};

auto add = [](int a, int b) {return a + b};

就我的理解而言,捕获的意思即为将一些变量展开使得为lambda内部可见,具体方式有如下几种:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值