[英]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)制造一個新物體。 它的構造者:
GetString()
的返回值作為參數來調用std::string
的副本構造函數, GetString()
的返回值,或者 GetString()
的返回值調用move構造GetString()
。 理論上它們是不同的,但實際上它們是相同的。 您唯一可以寫出區別的代碼將涉及decltype(my_string)
。
編譯器可以為兩者生成相同的程序集。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.