Re: [問題] vector複製時間消耗
剛剛試了一下 用cygwin的 g++ -std=c++0x
在有RVO的情況下 我發現回傳時加move反而慢
有RVO的情況下回傳值完全不需要copy或move
但如果明確寫了move就會需要1次move跟1次dtor
這是正常的嗎 總覺得是哪裡搞錯了 @@
還是說這些只要開了最佳化就都沒差了?
※ 引述《loveme00835 (高髮箍)》之銘言:
: ※ 引述《suhorng ( )》之銘言:
: : 開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
: : 平台可能是 mingw32 或 (32||64) 位元的 Ubuntu
: : G++ >= 4.6.2, with -std=c++0x (-std=c++11) flags on
: : 問題(Question):
: : 想請問一下, 我的程式中有如下片段
: : vector<my_type> result;
: : if (condition)
: : result = function1();
: : else
: : result = function2();
: : 而 function1, function2 的 prototype 皆為
: : vector<my_type> functionX();
: : 那麼我需要擔心那兩行賦值所花的時間嗎?
: : 還是其實並不會有複製的動作?
: : 另外請問有沒有推薦關於 C++ 這方面規定/G++現有的實做方面的資料呢?
: : 之前想測試這類 return (by value, by ref) 以及宣告新變數時會呼叫 operator=,
: : copy constructor, 或是普通的建構子, 可是結果跟我胡亂猜測的差很多..
: : 另外, 假如我在函式的參數中用 call by value, 那標準函式庫中的容器(特別是vector)
: : 有可能自己優化掉改用 R-value reference (若我剛好傳給他的是 R-value)嗎?
: : 麻煩各位大大解惑了, 謝謝! <(_ _)>
: functionX().swap( result );
: 以上是在沒有 C++1x 支援下的常見寫法.
: 即使在有 C++1x 的支援下, 要確保 move 語意, 還要注意任何
: 擁有權轉移的地方, 此例為兩個:
: (1) return local object from function
: (2) assigned by return value
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.248.72.119
→
02/16 21:16, , 1F
02/16 21:16, 1F
→
02/16 21:18, , 2F
02/16 21:18, 2F
→
02/16 21:19, , 3F
02/16 21:19, 3F
→
02/16 21:33, , 4F
02/16 21:33, 4F
→
02/16 21:33, , 5F
02/16 21:33, 5F
→
02/16 21:55, , 6F
02/16 21:55, 6F
→
02/16 21:56, , 7F
02/16 21:56, 7F
→
02/16 23:17, , 8F
02/16 23:17, 8F
推
02/17 14:07, , 9F
02/17 14:07, 9F
討論串 (同標題文章)