DEV Community

Ariston
Ariston

Posted on

关于右值引用

右值引用是用于引用临时对象,目的是转移资源,减少不必要的复制。
使用形式如下

BigData(BigData&& other){

}
Enter fullscreen mode Exit fullscreen mode

右值引用通常是用于绑定右值的,如果要强行使用左值,可以用move把左值包起来变成右值。如下

vector<int> vec1 = {1,2,3,4};
vector<int> vec2 = move(vec1);
Enter fullscreen mode Exit fullscreen mode

此时vec1的值就是未定义的,什么叫未定义呢,就是啥情况都有可能,
有可能为空,有可能是一些垃圾值,还有可能程序崩溃。

当然,在模板中也有可能出现类似右值引用的通用引用(转发引用)
形式如下

template<typename T>
void wrapper(T&& arg){
somefunction(forward<T>(arg));
}
Enter fullscreen mode Exit fullscreen mode

这样子就是通用引用,T&&既可以绑定左值也可以绑定右值,然后使用forward,forward是不会改变参数是左值还是右值,完美的保留了参数的原始类型和值类别。

Top comments (0)