#include <iostream>
class Foo { };
Foo createFoo() { return Foo(); }
void bar(Foo &&) { std::cout << "in bar(Foo &&)\n"; }
void bar(Foo const &) { std::cout << "in bar(Foo const &)\n"; }
void baz(Foo &&f) {
std::cout << "in baz, ";
bar(f);
// bar(std::move(f));
}
int main()
{
baz(createFoo());
return 0;
}
我的预期输出是:
in baz, in bar(Foo &&)
,但我得到: in baz, in bar(Foo const &)
。如果我将调用切换到 bar
(见评论),我会得到预期的输出,但这对我来说似乎是错误的。如果我不将 bar(Foo &&)
转换为 Foo&&
,编译器是否有某种原因无法调用 Foo&&
?提前致谢!
最佳答案
在 baz(Foo&& f)
内部, f
是一个 左值 。因此,要将其作为右值引用传递给 bar
,您必须将其转换为右值。您可以使用 static_cast<Foo&&>(f)
或 std::move(f)
执行此操作。
这是为了避免在同一功能中多次意外移动物体,例如在 bar(f)
中多次调用 baz
。
关于c++ - 关于 r 值引用的困惑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10604237/