移动语义: 真实数据并未动,另外数据也没有复制一份
变换的是什么: vector中保持的指向数据的指针
把原来的指针置空,新的vector 指针指向原来指针指向位置.
右值引用:int = 42 ; int &&r = i *42. 右值引用重要性质:只能绑定一个将要销毁的对象.
int &&rr1 =42; int &&rr2 = rr1 错误: 变量是左值,因此我们不能将一个右值引用直接绑定到一个变量上,即使这个变量是右值得引用类型也不行.
Move函数:虽然不能将一个右值引用直接绑定到一个左值上,但我们可以显示地讲一个左值转换为对应的右值引用类型.
int &&rr3 = std::move(rr1);
move告诉编辑器,我们有一个左值,但我们希望像一个右值一样处理它
使用右值传递的意义在于 我要调用可以区别 于非右值传递的构造函数,从而发生移动语义.