C++11引入右值引用后查看了很多资料,但都过于啰嗦,不能一针见血,这里用最简单的方式阐述一下
右值引用类型为 T&& 。如
T&& right_ref = ?
右边的 ?如果是右值就可以了。如果想用左值,就需要std::move(左值)
那么右值引用有什么用呢?答案是移动构造的参数用的是右值引用,比如
class A
{
public:
A(A&& other)
{}
}
上面这个构造函数就是移动构造函数。也就是当我们构造一个函数的时候。如果参数是右值引用。那么就会触发移动构造。移动构造就会掏空other(一般是指针之类的直接夺过来)。这样就会比拷贝构造高效了很多。也就是说std::move(左值)不会对左值有任何影响,只是为了让其作为参数来触发移动构造,在移动构造里才会对左值产生掏空的作用。
那么std::forward(?)是做什么的呢?
因为如果? 为 T&&时,是不会触发移动构造的,所以要经过std::forward(T&&)“完美转发”会才能触发移动构造