gpt4 book ai didi

c++ - 对 r 值引用的困惑

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:58:27 25 4
gpt4 key购买 nike

#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(请参阅评论),我会得到预期的输出,但这对我来说似乎是错误的。如果我不将 Foo&& 转换为 Foo&&,编译器是否无法调用 bar(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com