您的位置:首页 > 编程语言 > C语言/C++

《C++ Primer Plus(第六版)》(43)(第十八章 探讨C++新标准 笔记)

2017-01-05 14:40 330 查看
本章主要讲:

移动语义和右值引用

Lambda表达式

包装器模板function

可变参数模板

1.C++11新类型

long long

unsigned long long

char16_t

char32_t

2.扩大初始化列表的适用范围

3.声明

auto 自动类型识别

decltype 将类型声明为表达式指定的类型: decltype(x) y;//y是x的类型

模板类别名 using ITType= xxxx;效果跟typedef xxxx ittype;差不多,但是模板类别名可以用于部分具体化,typedef不行

nullptr

4.只能指针 unique_ptr、shared_ptr和weak_ptr

5.异常,新增noexpect声明不会引发异常

6.枚举,新增了class和struct定义

enum class New1{xxx1,xx2,xx3};

enum struct New2{xxx1,xx2,xx3};

7.类

explicit 显式

类定义的时候初始化成员变量

8.模板

基于范围的for循环 for(auto x : xxx)

新增STL容器forward_list/unorderd_map/unordered_multimap/unorder_set/unorder_multiset

新增了模板array

cbegin()和cend(),crbegin()和crend()

9右值引用,使用&&来表示,主要是用于移动语义

10.移动语义,是为了直接使用临时产生的原始数据

需要一个复制构造函数,一个移动构造函数

class cn

{

    cn(const cn& );

    cn(cn&& );//函数里面将指针的内容直接拿来用了,不再new,有点像浅复制

}

右值引用和移动语义带来的好处,主要是在实现了这些的库代码

11.强制移动

使用头文件utility的move()函数,可以进行强制移动,即使对方是左值

cn a;

cn b = move(a);

move()只是将a变成右值,还需要cn这个类有移动赋值运算符,否则,使用普通的复制赋值运算符,是不能进行强制移动的。

12.委托构造函数

在构造函数初始化列表中使用其他构造函数。可以少写代码

13.继承构造函数

可以直接使用父类的构造函数而不需自己去写一堆了。

14.override可以声明覆盖父类的函数,如果特征标不同,编译器会报错

如果不想父类函数被覆盖,可以使用final。

15.lambda表达式

匿名函数

使用[]代替函数名,没有返回类型,跟decltype类似。

16.包装器wrapper,也叫适配器adapter。

好吧,留作以后用到的时候再研究了。

17.可变参数模板

template<typename T, typename... args>
void f(T value, args... a)
{
}args是一个模板参数包
函数里面要使用递归。

18.C++的其他新增功能

并行编程

新增库

低级编程
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐