[英]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.