为什么 && 有时绑定左值而有时不绑定?
Why does && sometimes bind lvalues and other times not?
好的,我有这个代码:
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
的绑定有时不允许?
Why does the int&& sometimes allow binding from lvalues and sometimes not?
int&&
没有绑定到左值,因为它是一个 右值引用 .
T&&
,在 T
是模板参数的上下文中,确实绑定到左值,因为它是 forwarding reference。它不是右值引用,尽管语法几乎相同。
好的,我有这个代码:
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
的绑定有时不允许?
Why does the int&& sometimes allow binding from lvalues and sometimes not?
int&&
没有绑定到左值,因为它是一个 右值引用 .
T&&
,在 T
是模板参数的上下文中,确实绑定到左值,因为它是 forwarding reference。它不是右值引用,尽管语法几乎相同。