左值的正确参考

时间:2015-06-10 15:22:03

标签: c++ c++11

rvalue何时成为左值的正确参考?

示例如下,应使用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是rvalue 在函数flip中,参数t2在2上是正确的引用。当g被调用时,似乎t2是对左值的正确引用。
通过引用收到的rvalue(没有复制?)在什么时候变成了左值?

以下是示例:https://ideone.com/cJvFCg

1 个答案:

答案 0 :(得分:5)

"if it has a name"规则说在这样的代码中,如果变量有一个名字(在这种情况下,你的t2),那么它就变成了左值。 (另见Scott Meyers Effective Modern C++。)

为了保留调用者的原始意图,您确实会使用perfect forwarding

g(std::forward<T2>(t2), ...)