引用函数 return 值

Reference to function return value

举个例子:

#include <string> 

std::string Foo() {
  return "something";
}

std::string Bar() {
  std::string str = "something";
  return str;
}

我不想复制 return 值,这两个选项之间哪个更好?为什么?

 int main() {
   const std::string& a = Foo();
   std::string&& b = Foo(); 
   // ... 
 }

如果我现在使用 Bar 函数(而不是 Foo),与上面写的 main() 有什么区别吗?

 int main() {
   const std::string& a = Bar();
   std::string&& b = Bar(); 
   // ... 
 }

what is better between these two options?

都没有。这是过早优化的练习。你正试图为它做编译器的工作。 Return 值优化和复制省略现在已成为现实。并且移动语义(适用于像 std::string 这样的类型)已经提供了真正有效的回退。

所以让编译器做它的事情,并且更喜欢值语义:

auto c = Foo();
auto d = Bar();

至于Bar vs Foo。使用您喜欢的任何一个。 Bar 特别是 RVO 友好。所以两者很可能最终是一样的。