C++ Primer Chapter 13-5
来源:互联网 发布:面试什么是java线程池 编辑:程序博客网 时间:2024/06/07 07:29
1:我们可以用一个赋值运算符实现移动 和 拷贝赋值(前提是定义了移动构造函数)
foo & =operator(foo rhs)
在这里,如果 = 运算符的右侧对象是左值,那么由于会向 rhs 传递对象,那么会调用拷贝构造函数构造 rhs ,如果右侧对象是右值,那么会调用移动构造函数。
2:一当一个类定义了任何一个拷贝操作,就应该定义所有的五个操作(拷贝构造,拷贝赋值,移动构造,移动赋值,析构)
3:在调用
std:move(value)
之后,value 的值是未定义的,但是却又是有效的,为了保障程序不出问题,我们必须保证 执行该函数后,value 不能被访问(取值)。
4:移动迭代器
iter1 = make_move_iterator(iter)
利用这个函数可以把一个迭代器改成移动迭代器,就是把 iter 指向的内存元素变成可以移动的,对 iter1 解引用就可以得到类似 move(value)的操作。可以移动 *iter1 元素。但是我们必须保证移动后,我们不能访问 *iter ,因为原来元素移动后的值未定义,但却是有效的,如果访问会使得程序出问题。
5:建议不要随便使用移动操作,因为有一个移动后的元素他的状态具有不确定性,调用 std::move 一定要保证移动后的源不能被访问。
6:const T & 和 T &&
一般成员函数的参数是 const T & ,一般为左值,为了保证被复制对象的安全性,不用 T &,参数类型时 T && ,参数一般是右值引用,一般是为了窃取数据,是需要修改窃取后的数据的,不用 const T &&。
7:左值和右值引用成员函数
我们可以像 用 const 一样来用 & 和 && 来修饰一个 this 指针可以指向一个左值或者右值。引用限定符只能用于非 static 成员函数,引用限定符可以和 const 一起用,但是必须在 const 后面。
8:用 & 修饰的函数只能用于左值, && 修饰的函数只能用于右值。
9:引用限定符也是可以像 const 一样,可以区分重载函数。有无引用限定符是可以区分函数的类型。但是类似于成员函数参数的 const T& 和 T&& 一样,类型限定符可以为 const & 和 && ,前面一种可以用于任何对象,后面一种只可以用于右值类型。
10:如果一个类中有两个或者以上名字、参数、都相同的成员函数,那么这些函数中只要有一个函数有引用限定符说明,那么所有的其他同名同参数的函数都需要有,对于同名但是不同参数的则没有该要求。
11:foo(*this) 是一种 无主 的右值,foo 是类名。
0 0
- C++ Primer Chapter 13-5
- C++Primer-Function chapter
- C primer plus -- Chapter 2
- [primer]Chapter-5 Expressions
- C++ Primer Chapter 5
- C++ Primer Chapter 13-1
- C++ Primer Chapter 13-2
- C++ Primer Chapter 13-3
- C++ Primer Chapter 13-4
- 《C++ primer 5》 chapter 1.2
- 《C++ primer 5》 chapter 1.3
- 《C++ primer 5》 chapter 1.4
- 《C++ primer 5》 chapter 2.1
- 《C++ primer 5》 chapter 2.2
- C++ Primer Chapter 10-5
- C++ Primer Chapter 14-5
- C++ Primer Chapter 15-5
- c primer plus Chapter 14 p383
- debian 8.6 jessie 安装 Proxmox VE 安装失败解决方法
- C++ Primer Chapter 13-4
- 工程管理器
- Vue 实现组件 及 组件嵌套
- 求模的逆元
- C++ Primer Chapter 13-5
- 从Windows切换到Linux 一些比较好的软件 持续更新
- session机制
- lock与synchronized区别
- 动态规划:买书
- 马尔科夫链
- 选择排序
- Oracle EBS财务模块(四)账套
- 对函数和数列极限的理解