簡體   English   中英

將返回值存儲為const引用還是值

[英]Storing return value as a const reference versus as a value

假設一個函數具有簽名

std::string GetString();

並按值返回一個新字符串。 現在給出以下代碼:

// (a) Store the return value to a const reference.
const std::string& my_string = GetString();

// (b) Store the return value to a (const) value.
const std::string my_string = GetString();

從C ++ 11編譯器的角度來看,我是否正確理解(a)和(b)是相同的? 如果是這樣,是否在風格選擇上達成了共識?

從C ++ 11編譯器的角度來看,我是否正確理解(a)和(b)是相同的?

不,它們不相同。

(a)延長了GetString()返回的臨時對象的壽命。

(b)制造一個新物體。 它的構造者:

  1. 通過使用GetString()的返回值作為參數來調用std::string的副本構造函數,
  2. 由RTO分配了GetString()的返回值,或者
  3. 使用GetString()的返回值調用move構造GetString()

理論上它們是不同的,但實際上它們是相同的。 您唯一可以寫出區別的代碼將涉及decltype(my_string)

編譯器可以為兩者生成相同的程序集。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM