右值参数左值是什么时候?左值右参考
例子如下,它应该与std::forward
来解决:在调用发生
void g(int && v1, int & v2)
{
std::cout << v1 << " " << ++v2 << std::endl;
}
template <typename F, typename T1, typename T2>
void flip(F f,T1 && t1, T2 && t2){
g(t2, t1);
}
错误是这样的:
flip(g, j, 2);
我的问题是:在flip(g, j 2)
,第三个参数2
是右值。
在函数flip
中,自变量t2
是对2的正确引用。当调用g
时,看起来t2
是对左值的正确引用。
在参考文献中收到的参考文献(未复制?)是什么时候变成了左值?
这里是例子:https://ideone.com/cJvFCg
,但“最匹配的类型,包括价值参考' – Hcorg
我知道。但是:在flip(g,j,2)中''第三个参数是''int &&''类型的右值。相比之下,t2是从''int &&&& t2''推导到''int && t2'',这是正确的参考。显然,它不是右值,虽然它是由一个初始化的。 – tbukic
谷歌为“C++通用参考” –