繁体   English   中英

返回仅移动右值引用

[英]returning a move-only rvalue reference

在以下代码中:

#include <memory>

struct C {
    C() = default;
    C(C const&) = delete;
    C(C&&) = default;

    int a;
};

C foo(C&& c) {
    return c;
}

int main()
{
  auto c = foo(C{});
}

我在foo的return语句中出错:

Use of deleted function 'C::C(const C&)'". 

为什么要尝试调用复制构造函数? 不应该使用移动构造函数,因为c是右值引用? 即使不是因为这个原因,不应该return语句总是调用移动构造函数,因为return后值不能继续使用?

内部函数fooc ,一个命名的东西,是一个左值。 要调用移动构造函数,您需要明确地使其看起来像一个右值

return std::move(c);

正如juanchopanza所指出的, c是一个左值(因为它有一个名字)所以它会尝试复制它。 虽然您可以利用事实,但是通过值传递的本地对象和函数参数可以被视为return语句中的rvalues,而不必在return语句中调用std::move 这让你可以重写这个功能

C foo(C c) {
    return c;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM