c++ - 从 r-value ref-qualified 方法 move 还是不 move ?

标签 c++ return-value move-semantics c++17 ref-qualifier

在以下 C++11+ 代码中,应该首选哪个 return 语句构造?

#include <utility>


struct Bar
{
};

struct Foo
{
    Bar bar;

    Bar get() &&
    {
        return std::move(bar); // 1
        return bar;            // 2
    }
};

最佳答案

好吧,既然它是一个 r-value ref 限定的成员函数,this 大概就要过期了。因此,将 bar 移出是有意义的,假设 Bar 实际上从被 move 中获得了一些东西。

由于 bar 是一个成员,而不是本地对象/函数参数,因此在 return 语句中复制省略的常用标准不适用。除非您明确地 std::move 它,否则它将始终复制。

所以我的答案是选择第一个选项。

关于c++ - 从 r-value ref-qualified 方法 move 还是不 move ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48485885/

相关文章:

c++ - 16 字节长的整数类型

c++ - c++11 中的命名空间问题?

c++ - 如何将 PDF 文档的所有页面向右移动一英寸?

javascript - js返回插件的多种方法.apply()

c++ - 当变量用于初始化列表时,为什么 C++ 不知道在返回值中进行隐式 move ?

c++ - move 后重用变量

c++ - QSerialPort 在开发环境之外运行时崩溃

javascript - 修改此函数以显示所有选中的复选框的值(而不是最后选择的)

php - 在函数中返回 parent::function

c++11 - C++ 允许将数据移出类成员的最佳方法是什么(std::move 语法)