【发布时间】:2010-12-23 18:43:08
【问题描述】:
在 C++03 中编程时,我们不能将未命名的临时 T() 传递给函数 void foo(T&);。通常的解决方案是给临时命名,然后像这样传递它:
T v;
foo(v);
现在,C++0x 出现了——现在有了右值引用,定义为 void foo(T&&) 的函数将允许我传递一个临时值。这让我想到了我的问题:由于一个接受右值引用的函数既可以接受右值引用(未命名的临时对象)也可以接受左值引用(命名的非常量引用),是否有任何理由在函数参数中再使用左值引用?我们不应该总是使用右值作为函数参数吗?
当然,一个接受左值引用的函数会阻止调用者传递一个临时值,但我不确定这是否是一个有用的限制。
【问题讨论】:
-
如果例程试图存储参数的地址以供将来在某处使用,这将是一个非常有用的限制。
标签: c++ c++11 lvalue rvalue-reference