为什么&&有时绑定左值和其他时间不?

时间:2016-06-18 00:11:22

标签: c++ rvalue-reference lvalue rvalue

好的我有这段代码:

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进行绑定,有时不允许绑定?

1 个答案:

答案 0 :(得分:9)

  

为什么int&amp;&amp;有时允许从左值结合,有时不允许?

int&&未绑定到左值,因为它是右值参考

T&&,在T是模板参数的上下文中,确实绑定到左值,因为它是forwarding reference。它不是右值引用,即使语法几乎相同。