我刚刚在课堂上偶然发现了这一点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
函数和类中的值可以是左值或右值。