Re: [問題] constructor assignment與initializer

作者: wawi2 (@@)   2017-11-05 11:48:25
我猜你要問的是在constructor內對成員賦值的兩種做法
1. 是使用initializer list
2. 在ctor內使用assignment
基本上使用initializer list會有較高的效率
因為在建構一個物件時 其成員的constructor也會被呼叫
而使用initializer list可以在成員的constructor被呼叫之時即賦值
如果使用2的方法 compiler做的事情是對成員呼叫其contructor 然後又再assign新值
因此2的方法效率會較低
P.S. 這個討論的範圍是該成員是一個class 若成員均是primitive type
那麼1跟2的做法效率就差不多
※ 引述《ab18282099 (poppopjack)》之銘言:
: 開發平台(Platform): (Ex: Win10, Linux, ...)
: Win10
: 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
: VC++
: 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
: 問題(Question):
: 小弟有以下疑惑:
: C++的constructor可以用assignment和initializer兩種寫法,不知道有沒有大神能夠解釋或是說明什麼情況用initializer較佳或assignment較佳,感謝!
: 餵入的資料(Input):
: 預期的正確結果(Expected Output):
: 錯誤結果(Wrong Output):
: 程式碼(Code):(請善用置底文網頁, 記得排版)
: 補充說明(Supplement):
:
作者: uranusjr (←這人是超級笨蛋)   2017-11-05 14:39:00
可是如果是簡單的 this.foo = new Foo; 應該會滿足 copyelision 條件, 編譯器會把多餘的那個 copy 省掉
作者: kyuudonut (善良老百姓)   2017-11-05 20:21:00
我記得變數若是 const,則不能用 assignment 做初始化?
作者: loveflames (咕啾咕啾魔法陣)   2017-11-05 22:29:00
ref也不行

Links booklink

Contact Us: admin [ a t ] ucptt.com