簡體   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