一般我们传递的右值都是临时变量,所以可以随意修改、如果我们知道函数的某个参数是一个右值,就可以将其作为一个临时存储或获取其中的内容,而不会影响程序的正确性。这也就意味着,比起拷贝右值参数的内容,再使用,不如直接使用该右值内容。当动态数组比较大的时候,这样可以节省很多内存分配,提供更多的优化空间。试想,一个函数以vector作为一个参数,就需要将其拷贝进来,而不对原始数据做任何操作。在C++03/98中,我们会采用如下的方法,将这个参数作为一个左值的const引用传入,然后做内存拷贝:
void copy(vector<int> const& vec)
{
vector<int> v(vec);
v.push_back(1);
}
1这样就可以将左值或右值传递给该函数了,不过任何情况都是通过拷贝来完成的。如果使用右值引用版本的函数来重载这个函数,这就能避免在传入右值的时候,函数会进行内部拷贝的过程,因为可以任意的对原始值进行修改: