繁体   English   中英

引用函数返回值

[英]Reference to function return value

举个例子:

#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(); 
   // ... 
 }

这两个选项之间哪个更好?

都不行 这是过早优化的一种练习。 您正在尝试为此执行编译器工作。 现在,返回值优化和复制消除实际上已成为法律。 移动语义(适用于std::string类的类型)已经提供了真正有效的后备。

因此,让编译器执行其操作,并首选值语义:

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

至于Bar vs Foo 使用您喜欢的任何一种。 Bar尤其是RVO友好的。 因此,两者最终很有可能会一样。

暂无
暂无

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

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