右值引用是C++11 一大亮点,它解决了C++中由于临时对象带来的效率问题。
左值的声明符号为”&”, 为了和左值区分,右值的声明符号为”&&”。
void fun(int&& num)
{
std::cout<<num<<std::endl;
}
C++11标准库提供了函数 std::move,这个函数以非常简单的方式将左值引用转换为右值引用。
例如一个交换函数:
template <class T> swap(T& a, T& b)
{
T temp = std::move(a);
a = std::move(b);
b = std::move(temp);
}
避免了三次拷贝操作,效率大幅提升。
做了个小的性能测试:
定义了
std::vector<int> c(50000,12);
std::vector<int> d(50000,22);
使用一般交换方式:
T temp = a;