std::move
面试的时候被问到了c++11新特性,感觉答的不好,所以回来重新总结下:
1 产生背景:
首先 std::move是一个标准库函数。
虽然不能将一个右值引用直接绑定到一个左值上,但是可以显式的将一个左值转换为对应的右值引用类型。我们可以调用move来获得绑定到左值上的右值引用,头文件为。
int && rr3=std::move(rr1);
move告诉编译器:我们有一个左值,但我们希望像一个右值一样处理它。但是这也意味着:除了对rr1赋值或者销毁它,我们将不再使用它(移动源对象的值)。
#include // move (ranges)
#include // move (objects)
对容器的move 以及对容器每个对象的move
#include <iostream>
#include <vector>
#include <stddef.h>
#include <string>
#include <memory>
using namespace std;
int main()
{
vector<int> ves1{1,2,3};
vector<int> ves2(3);
vector<int> ves3(4);
cout<<"ves1 contains " << ves1.size() << " ele