好的我有这段代码:
struct Mine{
template<typename T>
Mine(T&& x){
}
};
void nFoo(int&& x){
}
void sFoo(Mine x){
}
nFoo
直接获得int&&
,而sFoo
进行一些尝试以获得相同的效果。
考虑以下代码:
nFoo(12); //Works
int x = 0;
nFoo(x); //Cannot bind int (lvalue) to int&&
sFoo(12); //Works
sFoo(x); //Works
为什么int&&
有时允许从lvalue
进行绑定,有时不允许绑定?
答案 0 :(得分:9)
为什么int&amp;&amp;有时允许从左值结合,有时不允许?
int&&
未绑定到左值,因为它是右值参考。
T&&
,在T
是模板参数的上下文中,确实绑定到左值,因为它是forwarding reference。它不是右值引用,即使语法几乎相同。