【C++成长之路】C++ 11新特性(1)

 前言

    认识c++11新特性


一.c++11简介

相比于C++98/03,C++11则带来了数量可观的变化,其中包含了约140个新特性,以及对C++03标准中约600个缺陷的修正,这使得C++11更像是从C++98/03中孕育出的一种新语言。相比较而言,C++11能更好地用于系统开发和库开发、语法更加泛华和简单化、更加稳定和安全,不仅功能更强大,而且能提升程序员的开发效率。
 

二.列表初始化

C++11扩大了用大括号括起的列表(初始化列表)的使用范围,使其可用于所有的内置类型和用户自 定义的类型,使用初始化列表时,可添加等号(=),也可不添加。


三.类型推导

auto 关键字的作用在编译阶段对于=右边的对象进行自动的类型推导

既然有了auto 可以自动推导=右边的类型, 为啥需要decltype呢????decltype的出现是为了补齐auto 不支持对于表达式的类型推导的缺陷的, 经常适用于后置返回类型的推导. 使用形式如下:     如下包含了万能引用, 完美转发lambda表达式等等知识点, 后序会一一讲解清除
 

四.右值引用,移动语义

  • 故名思意, 对左值的引用就是左值引用, 对于右值的引用就是右值引用
  • 定义左值和右值的区别,   可否进行取地址, 可以取地址的就是左值, 不可以取地址的就是右值
  • const 左值引用既可以引用左值也可以引用右值. 
  • std::move() 方法可以将左值转换为右值

移动构造相对于拷贝构造: 比较区别????

移动构造和拷贝构造本质都是构造一个对象:    只是两者采取的构造方式不一样, 拷贝构造的话如果是深拷贝, 也就是底层存在堆区数据, 存在指针, 就需要新开堆区空间, 且需要进行堆区数据的拷贝,  效率低...     移动构造, 我还是需要堆区空间存储数据, 但是我不自己新开辟, 我直接将拷贝对象的堆区资源转移过来成为我的即可.,....  不需要new 空间 +  数据转移, 效率提高

注意:  移动构造 和  拷贝构造相比,  它的高效仅仅体现在深拷贝 上面, 如果不存在深拷贝. 仅仅只是栈区数据的拷贝, 两者效率是相同的

深拷贝:   存在堆区空间的拷贝....     也就是存在底层存储数据的空间的拷贝

移动构造高效就高效在了这个底层存储数据空间的获取上面, 不是从新申请空间  + 拷贝数据的方式来获取的, 而是直接的获取对方的现有空间  + 数据


五.万能引用+完美转发

万能引用:  就是 既可以引用左值  也可以引用右值      模板中的&& 万能引用

***************前面我们学过 右值一旦 被引用之后就可以取地址了, 其实也就自然退化为左值了, 这个时候需要调用 std::forward<类型>()  进行完美转发, 保持之前的类型属性不退化****************

六.可变参数模板

C++11的新特性可变参数模板能够让您创建可以接受可变参数的函数模板和类模板,相比 C++98/03,类模版和函数模版中只能含固定数量的模版参数,可变模版参数无疑是一个巨大的改 进。然而由于可变模版参数比较抽象,使用起来需要一定的技巧,所以这块还是比较晦涩的。
简单的理解可以理解为一个参数包, 可以支持传入数量不固定的参数, 而且还是模板, 使用起来更加的灵活
 

七.emplace_back 的出现和对比分析 push_back接口  emplace_back 是 结合这 可变模板参数出现的

 八.包装器 (适配器) (function包装器)

unction 是 C++中的类模板, 也是一个包装器.
说到包装器, 首先就要思考              函数指针, 仿函数, Lambda表达式
上章就提到了 三者底层可能差不大多, 使用的情景也是各有雷同, 包装器 其实就可以算是将上述三者进行一个统一, 适配成一个东西    如下 : function 包装器可以实现对三者的统一包装

包装器的好处????    统一了可调用对象的类型, 并且指定了参数和返回值类型
1. 简化了函数指针这样的复杂指针的使用, 函数指针复杂难以理解
2. 方便了作为参数时候的传入
3. 仿函数是一个类名没有指定参数和返回值需要知道就需要去看这个operator () 重载获取
4. lambda 在语法层, 看不到类型, 底层存在类型, 但是也是lambda_uuid, 也很难看

我觉得function 出现的 最最重要的原因就是有了一个确切的类型,  使用简单方便, 

解决函数指针使用复杂的问题, 解决仿函数不能指定参数类型的问题,  要知道参数类型还要跑去看哪个 operator()     以及解决    lambda没有具体类型的问题. 
 

总结

理解新特性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值