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

Dar*_*bik 3 c++ rvalue lvalue rvalue-reference

好的,我有这个代码:

struct Mine{
    template<typename T>
    Mine(T&& x){
    }
};
void nFoo(int&& x){
}
void sFoo(Mine x){
}
Run Code Online (Sandbox Code Playgroud)

nFoo需要一个int&&直接,而sFoo做一些finagling来获得同样的效果.

考虑以下代码:

nFoo(12); //Works

int x = 0;
nFoo(x);  //Cannot bind int (lvalue) to int&&

sFoo(12); //Works
sFoo(x);  //Works
Run Code Online (Sandbox Code Playgroud)

为什么int&&有时允许从lvalues 绑定,有时不允许绑定?

eer*_*ika 9

为什么int &&有时允许从左值绑定,有时不允许绑定?

int&&不会绑定到左值,因为它是右值引用.

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