右值引用的参数传递疑问(C++0x)

c++0x增加了右值引用,有些疑问
比如:
template< class T >
T&& move( T&& t ) // typename std::remove_reference<T>::type
{
return t;
}
template <class T> swap(T& a, T& b)
{
T tmp(std::move(a));
a = std::move(b);
b = std::move(tmp);
}

问:
1、右值引用变量初始化的时候,只能是右值(表达式),但是move函数的参数也声明T&& t,确可以接受左值(引用)和右值,[color=#FF0000]如果实参是左值传入[/color],t是怎样完成初始化的过程?

2、还有move返回的是右值引用,
int a = move(5); 与 int&& a = move(5); 有什么区别?

请高手指点下关于右值引用的本质。

讨论这种还没有具体实现的语法意义不大。。

我的感觉是右值引用相当于以前经常写的 const T & t ,解决一个临时变量的引用问题, 效率可能会高一些。

1. 右值引用并不是只能指定成右值, 否则一个函数你只能用临时变量调用它,这行为未免太不可理喻了。 引用又叫别名, 他就是同一个东西的另一个名字, 所以没有“初始化”的问题, 这个东西的初始化在它的别名出现之前就已经结束了。

2. int a = move(5) 这里move返回的是一个引用还是一个值都无所谓了, 因为a本身是个对象实体,所以这里的初始化是拷贝的。
int && a = move(5)这里就分两种情况, 如果move返回的是一个引用, 那么a同样是一个引用, 引用的是同一个东西。 如果move返回的是一个临时变量(按值返回), 这里a就是引用那个返回值, 相当于是给返回值一个名字。

因为没有具体用过这个语法,上面说的就是根据之前看到的介绍的理解。 尤其是左值引用跟右值引用的具体差别部分还不清楚, 也没兴趣查文档, 还是等用到了再说吧
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-11-02
右值引用,mark
相似回答