C++ 第18章 探讨C++新标准

18.1 复习前面介绍过的C++11功能

新类型:
long long、unsigned long long、char16_t、char32_t、原始字符串(所见即所得,字符串前加R前缀,字符串首尾加上小括号R"(string)")

统一的初始化:
在这里插入图片描述
在这里插入图片描述

初始化列表语法可防止缩窄,即禁止将数值赋给无法存储它的数值变量,禁止将值存储到比它“窄”的变量中,但是允许转换为更宽的类型。另外,只要值在较窄类型的取值范围内,将其转换为较窄的类型也是允许的(数值需要在取值范围内)

**std::initialiizer_list:**可将其作为构造函数的参数
如果有类接受initializer_list作为参数的构造函数,则初始化列表语法就只能用于该构造函数.

声明:
auto:自动类型推断
decltype:将变量的类型声明为表达式指定的类型
返回类型后置:在函数名和参数列表后面指定返回类型
在这里插入图片描述
模版别名:using=:在这里插入图片描述
(类似于typedef)
nullptr:表示空指针,它是指针类型,不能转换为整型类型。

**智能指针:**在程序中使用new从堆分配内存,等到不再需要时,自动将其释放

异常规范方面的修改:

**作用域内枚举:**可以创建枚举量作用域为类或者结构的枚举

对类的修改:
显式转换运算符:
explicit禁止单参数构造函数导致的自动转换,C++11拓展了explicit这种用法,使得可对转换函数做类似的处理

类内成员初始化:可以在类定义中初始化成员

模版和STL方面的修改:
基于范围的for循环:
在这里插入图片描述
新的STL容器:
在这里插入图片描述
新的STL方法:
在这里插入图片描述
valarray升级:
在这里插入图片描述
摒弃export
尖括号:不需要使用空格将尖括号分开(>>,> >)

右值引用:&&
右值引用可关联到右值,即可出现赋值表达式右边,但不能对其应用地址运算符的值。左值相当于地址值,右值相当于数据值。右值指的是引用了一个存储在某个内存地址里的数据。

https://tonglin.blog.csdn.net/article/details/91479048?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-91479048-blog-70173146.t5_refersearch_landing&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-91479048-blog-70173146.t5_refersearch_landing&utm_relevant_index=1

18.2 移动语义和右值引用

**移动语义:**保留原始数据位置,只是将原始数据转移到另一个变量中,简单来说解决的是各种情形下对象的资源所有权转移的问题。
右值引用让编译器使用移动构造函数来初始化对象。使用左值对象初始化对象时,将使用复制构造函数,而使用右值对象初始化对象时,将使用移动构造函数。

18.3 新的类功能

特殊的成员函数:
移动构造函数、移动赋值运算符(就是将左值引用改为右值引用&&)
在这里插入图片描述
在这里插入图片描述

可以使用default显式声明构造函数的默认版本,使用delete禁止编译器使用特定方法。
在这里插入图片描述

在这里插入图片描述
委托构造函数:
构造函数暂时将创建对象的工作委托委托给另一个构造函数
在这里插入图片描述
(使用另一个构造函数的代码,剩下的再补充)

继承构造函数:
使用using声明使得派生类继承基类的所有构造函数(默认构造函数、复制构造函数和移动构造函数除外),但不会使用与派生类构造函数的特征标匹配的构造函数。

管理虚方法:override和final:
在C++11中,可使用虚说明符oberride指出要覆盖的一个虚函数,将其放在参数列表后面。如果声明与基类方法不匹配,编译器将视为错误。说明符final可以禁止派生类覆盖特定虚方法。
在这里插入图片描述
在这里插入图片描述

18.4 Lambda函数

在这里插入图片描述
(没有返回类型和函数名)
在这里插入图片描述
在这里插入图片描述

18.5 包装器

包装器可以将可调用对象统一包装成一个类型。function就是一个包装器,也可称为适配器。(固定输入参数类型,使其只实例化一次)

18.6 可变参数模版

可接受可变数量的参数
在这里插入图片描述
模版和函数参数包:
在这里插入图片描述
(模版参数包Args中包含多个参数类型,函数参数包args中包含与Args匹配的值)
展开参数包:
将省略号放在函数参数包的右边,将参数包展开
在这里插入图片描述
将函数参数包展开,对列表中的第一项进行处理,再将余下内容传递给递归调用,以此类推,直到列表清空
在这里插入图片描述

C++11 新增的其他功能

并行编程:C++定义了一个支持线程化执行的内存模型,添加了关键字thread_local,提供了相关的库支持。

新增的库:random/chrono/tuple/ratio/regex

低级编程:放松了POD的要求;允许共用体的成员有构造函数和析构函数;解决了内存对齐问题;constexpr机制

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值