→ loveme00835:候選二回傳型態是 String& 等同於具名物件, 即l-value 12/10 01:32
→ nowar100:可是我不想讓他多產生暫時物件,又要回傳回去,還有其他 12/10 01:34
→ nowar100:辦法嗎?也不能回傳 String&& 阿 謝謝 :D 12/10 01:35
→ loveme00835:std::move( str1+str2+str3 ) + str4; 12/10 01:35
→ loveme00835:或者你可以回傳 String, 再寫一個 String(String&&) 12/10 01:36
→ loveme00835:在候選二return的地方拿來建構新的暫時物件 12/10 01:37
→ nowar100:我就是不想用std::move 不過String(String&&)我試試... 12/10 01:38
→ nowar100:不對阿 照這樣說 不就還是要再建構一個新的物件... 12/10 01:40
→ loveme00835:你叫String(String&&)的時候還是會需要 std::move... 12/10 01:40
→ nowar100:我就是想用str1+str2+... 這種 只產生一個暫時物件就好 12/10 01:40
→ loveme00835:這個新建構的物件可以直接搶傳進來物件的資源, 成本不 12/10 01:41
→ loveme00835:會很高= =" 12/10 01:41
→ nowar100:我懂你的意思了謝謝! 所以還是沒有辦法做到不用暫時物件 12/10 01:48
→ nowar100:只是說那個暫時物件內容轉移的成本可以被降低 這樣吧 12/10 01:48
→ nowar100:不然 以前沒有RvalueRef的時候都要真正的去拷貝內容 12/10 01:49
→ loveme00835:嗯嗯...本來operator是回傳複本的, 回傳String& 有點 12/10 01:50
→ loveme00835:怪怪@_@ 12/10 01:50
→ loveme00835:STL 的容器也都有 && 版本的建構子啦~ 12/10 01:52
→ nowar100:嗯嗯 謝謝 :D 12/10 02:10
推 LoganChien:大方地回傳 String && 就可以了。不過要 static_cast。 12/11 02:18
→ LoganChien:或者 return std::move(lhs); 12/11 02:20