Return 右值引用 vs return 函数 return 类型中的值

Return rvalue reference vs return by value in function return type

在我的代码中,我有一个函数可以从一段数据构造一个字符串,然后 returns 它。此字符串未在其他任何地方使用,因此接收方对其使用移动赋值或移动初始化是安全的。

std::string ReadString(...) {
    ...
    return std::string(...)
}

这基本上就是我所拥有的。 使函数 return 类型为 std::string&& 是否有意义,因为被 returned 的值是一个右值?

std::string&& ReadString(...) {
    ...
    return std::string(...)
}

我担心的是,当我们 return 我们的字符串时,可能会产生多余的副本,并且可以通过将 return 类型设为右值引用来缓解这种情况。

我怀疑编译器也可以针对这些情况进行优化,但是我不确定。

所以问题是 - 在这种情况下使 return 类型成为右值引用有什么意义吗?为什么?另外,如果没有,那么函数 returning 右值引用的可能应用是什么?

谢谢。

返回对即将被销毁的对象的引用总是错误的:引用的对象将在以任何形式使用之前被销毁。将引用设为右值引用并不会改变这一点,它只是 return 进行临时编译。

请注意,return按值处理临时字符串可能会导致复制省略,即对象可能会直接在使用它的位置构造。如果那没有发生,如果有 return 类型的移动构造函数(有 std::string 的),对象将被移动。请注意,当 return 使用函数局部变量而不是临时变量时,这同样适用。