#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/

10-11 23:02
查看更多