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

2017-01-05 20:04:40来源:CSDN作者:u012175089人点击

第七城市

本章主要讲:

移动语义和右值引用

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++的其他新增功能

并行编程

新增库

低级编程






第七城市

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台