在C++03中编程时,我们不能将未命名的临时对象T()
传递给函数void foo(T&);
。通常的解决方案是给临时对象命名,然后像这样传递:
T v;
foo(v);
现在,C++0x推出了右值引用,一个被定义为
void foo(T&&)
的函数将允许我传递一个临时对象。这就是我的问题所在:既然一个接受右值引用的函数可以同时接受右值引用(未命名的临时对象)和左值引用(命名的非const引用),那么还有什么理由在函数参数中使用左值引用呢?我们不应该总是使用右值作为函数参数吗?当然,一个接受左值引用的函数可以防止调用者传递一个临时对象,但我不确定这是否是一个有用的限制。