假设我有以下功能:
void f2(int&& i)
{
puts("f2(int&& i)");
}
void f(int&& i)
{
puts("f(int&& i)");
f2(i);
}
发出的编译器错误是:
错误 C2664:“void f2(int &&)”:无法将参数 1 从“int”转换为“int &&”
消息:您不能将左值绑定到右值引用
如果你int&&
再次调用它,它会起作用std::move()
:
void f(int&& i)
{
puts("f(int&& i)");
f2(std::move(i));
}
但这不应该是必要的吗?在我看来,接收到的变量f(int&& i)
是一个 xvalue。如果f
接收int&&
,那么我们应该能够传递它,不是吗?
仍然是左值如何int&&
接收?f