【发布时间】:2012-09-07 18:12:00
【问题描述】:
我刚刚在课堂上偶然发现了 T&&,而函数意味着不同的东西。
在功能上:
template<class T> void f(T&& t){}; // t is R or L-value
...
int i=0;
f(i); // t in f is lvalue
f(42); // t in f is rvalue
在课堂上:
template<class T>
struct S {
S(T&& t){} // t is only R-value?
};
...
int i;
S<int> ss(i); // compile error - cannot bind lvalue to ‘int&&’
这是否意味着如果我们在课堂上有T&& t,那么t 将只是右值?
有人可以指出我可以在哪里获得有关此的更多信息吗?
这是否意味着我需要为 L 和 R 值编写两个方法重载?
回答
正如 Alf 的示例所示,函数和类中的t 可以是左值或右值。
【问题讨论】:
-
t可以是右值引用或左值引用,但在这两种情况下,t都是左值。每个函数参数都是一个左值,与类型无关。
标签: c++ c++11 rvalue-reference pass-by-rvalue-reference