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