推 loveme00835:第一個問號: 你無法知道自己是不是暫時物件, 第二個問 02/07 22:16
→ loveme00835:號 + 的實作通常是委派給 +=, 其他類似的運算子也是如 02/07 22:17
→ loveme00835:此, 要讓自己的類別使用起來像內建型態非常的不容易, 02/07 22:18
→ loveme00835:光std::string就作了很多奇怪的重載版本, 不過也多虧 02/07 22:19
→ loveme00835:他這麼麻煩, 才不會讓程式設計師寫出很多語意很奇怪的 02/07 22:20
→ loveme00835:碼, r-value ref 是用來增加效率, 並不是用來補強為了 02/07 22:21
→ loveme00835:語法方便所帶來的副作用 02/07 22:21
→ legnaleurc:我想這就是我的問題, 自己就是個暫時物件的情況 02/07 23:26
→ legnaleurc:其比例並不算小, 但 rvalue ref 給我的感覺是它比較適 02/07 23:27
→ legnaleurc:合用在 operand 上 ... 至少語法上比較方便 02/07 23:27
推 loveme00835:自己是暫時物件的情況比較常出現是在作為函式引數的情 02/07 23:39
→ loveme00835:況, 就像 binary operator, 像您這樣用暫時物件再產生 02/07 23:40
→ loveme00835:更多暫時物件的情況是比較不被建議使用的, 如 02/07 23:41
→ loveme00835:Exceptional C++ 一書中所提到的, 不只中途可能出錯 02/07 23:42
→ loveme00835:測試的複雜度也會提高 02/07 23:42
推 loveme00835:考慮這樣的敘述 obj2 = (obj1 = Object()).clone(); 02/08 00:20
→ loveme00835:這樣的資源應該由誰來擁有呢? 02/08 00:21
→ legnaleurc:括號內就已經算是左值了吧 02/08 00:23
→ loveme00835:挖勒上面例子舉得不太好...Orz 02/08 00:23
→ legnaleurc:我的意思是你總不可能每產生一次暫時物件就用一個左值 02/08 00:24
→ legnaleurc:去接, 比方說 Qt 的 QString::arg() 系列 02/08 00:25
→ legnaleurc:正常人都會用 s.arg().arg() 的方式去用它 02/08 00:26
→ legnaleurc:所以最後這是使用者的責任嗎? 在確定是右值的狀況下 02/08 00:31
→ legnaleurc:用 std::move 來強制指定? 02/08 00:32
→ loveme00835:我怎麼覺得在 Data Flow Testing 的觀點這是不正常的 02/08 00:32
→ legnaleurc:不過仔細想想 ... 好像也沒用, 怎麼讓 *this 變右值? 02/08 00:33
→ loveme00835:用法...java這樣作是可以再作進一步的最佳化或用heap 02/08 00:33
→ loveme00835:base object來減少出錯機率, 不過 this 變右值我記得 02/08 00:35
→ loveme00835:N2439 有提到 02/08 00:35
→ loveme00835:可以參考 N2377 02/08 00:39
→ legnaleurc:呣, 看來VC10還沒實裝 ... N2377 的意思應該是當實體 02/08 00:46
→ legnaleurc:可被推導成右值時, 就喚起修飾為 rvalue instance 的 02/08 00:46
→ legnaleurc:版本吧? 如果是這樣的話還滿實用的 02/08 00:47
→ legnaleurc:gcc 也還沒實裝 ... 我看等它們都實裝了我再跟進好了 02/08 01:09
→ legnaleurc:雖然可能要等上一年半載 ... 02/08 01:09
→ yoco315:c++ 真的變的好恐怖... 02/08 03:20
→ legnaleurc:坦白說這樣還是要寫很多重載版本啊= = 02/08 15:28
推 VictorTom:不不, C++一直都很恐怖....(抖~_~) 02/08 22:47
→ james732:同意樓上,C++越學越覺得我什麼都不會... 02/09 02:50
→ james732:這篇文章我都看不懂 orz 02/09 02:51