我目前正在阅读有关完美转发的文章,它指出完美转发的目的是将左值作为左值传递,将右值作为右值传递。所以我用下面的例子来理解完美转发。这里的foo
对象有一个复制和移动 cnstr,它也有一个复制和移动赋值运算符。
void mfoo(foo arg)
{
.......
}
template<typename T>
void relay(T&& arg)
{
mfoo(std::forward<T>(arg));
}
//Start here
foo f;
relay(std::move(f));
现在我在 VS2012 中测试这段代码,移动构造函数只被调用一次。我期待它被调用两次。如果有人可以向我解释这一点,我将不胜感激。我希望在中继调用第一个移动构造函数,在 mfoo 调用下一个移动构造函数