c++ - 引用函数返回值

标签 c++ reference rvalue-reference

举个例子:

#include <string> 

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

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

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

 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?

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

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

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

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

关于c++ - 引用函数返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46951306/

相关文章:

c++ - 未定义对 CreateCompatibleDC、BitBlt 等的引用?

c++ - 右值引用和 std::move

c# - 找不到命名空间!

c++ - 索引字符串?

c++ - operator== 是成员函数还是友元函数,?

c++ - memset() 函数输出不理想

java - 在每个 jvm 级别使用 == 运算符时,同一类的两个对象之间的明确比较是什么?

c++ - 将 std::forward_as_tuple() 结果传递给可能从该对象的右值引用成员移动的多个函数?

c++ - auto && outside range-for

android - 如何在 Android 和 Linux 上将 JPG 文件解码为相同的位图?