C_and_CPP 板


LINE

※ 引述《justinC (無)》之銘言: : 請問用串列初始化 : 跟 在建構元內寫指定來初始化兩個差異性在哪 各有啥好處 我聽過的翻譯是叫 "初始化串列" " initial list " 差在用 initial list 時, object 會呼叫 constructor 會比較快. 在 {} 裡叫用 operator = 會比較慢一點, 你多呼叫了一個函式. 以下為例 : class Student { public: // version1 : use initial list. Student( const string& str ) : name( str ) // just call copy constructor. {} // version2 : non-use initial list. Student( const string& str ) { // compiler 會偷偷插入 name::string()呼叫預設建構子初始化 name = str; // call string::operator=. } string name; }; note: version1 和 version2 不可能同時存在. (這裡是example XD) version1: name 呼叫 class string 的建構子. <= 只呼叫一次. version2: compiler 會在建構子偷偷插入 name::string() 呼叫預設建構子. 接下來 name = str 會呼叫 class string 的 operator = (...). => 呼叫二次. note: 若 string operator = 內部實作是用動態配置記憶體的話, 你還要先 delete 掉 buffer 再重新 allocate 夠大的 buffer 然後再塞 data. 不管 operator = 實作再快, 都逃不了 compiler 偷偷塞的 預設建構子呼叫, 比 initial list 就是多了一次呼叫. 好處: (個人意見 XD) initial list : 比較快. 一般寫法 : 比較慢. 壞處: initial list : 寫時比較麻煩(其實也還好 ) 一般寫法 : 易讀. 一般來說用 initial list 都比較快. 不過我想就一般基本型別應該沒啥差 差的應該都是 user defined data. : 我只知道用串列可以初始化const 的變數 嗯, 基本上 const type variable_name 的 都一定要用 initial list 初始化. : 如果指定可以 配置動態記憶體 : 想問各個優缺點 謝謝 這個我完全看不懂你在寫啥 XD 有錯請指正 :) --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.192.143.24
1F:→ babyghost:寫錯,編譯器偷塞的應該是 name.string::string(). 02/16 00:47
2F:→ babyghost:C++ Primer or efficient C++ Performance Programming 02/16 00:49
3F:→ babyghost:Techniques 的第五章 都可以參考一下 02/16 00:49
4F:推 justinC:好詳細 我最後指的是 如果 char *字串 就要 allocate空間 02/16 01:06
5F:推 cplusplus:可以再加一點壞處 list無法事先作參數檢查或額外處理 02/16 01:09
6F:→ cplusplus:另外如果是基本型別 兩種效率相同 02/16 01:10
7F:→ cplusplus:list好處還有~ const成員的唯一初始化地方... 02/16 01:11
8F:推 godfat:我覺得參數檢查應該放在外面說,放在裡面像在測試 02/16 01:19
9F:→ cplusplus:沒錯誤當然最好 可是使用者通常不會這麼乖orz 保險一點 02/16 01:23
10F:→ cplusplus:還是做錯誤檢查比較好 可以做安全機制 02/16 01:24
11F:推 godfat:我的意思是在傳給 c'tor 前先檢查,不要放在 c'tor 內檢查 02/16 01:27
12F:→ godfat:有的時候可以確定輸入必為正確,放在 c'tor 內影響效率 02/16 01:27
13F:→ godfat:當然我想這還是要看情況就是了,沒什麼絕對的 02/16 01:28
14F:推 UNARYvvv:member initialization list 02/16 19:31







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BuyTogether站內搜尋

TOP