Re: [問題] 建構元初始化
看板C_and_CPP (C/C++)作者babyghost (Python語法真精簡 Orz)時間19年前 (2006/02/16 00:21)推噓5(5推 0噓 9→)留言14則, 5人參與討論串1/1
※ 引述《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
→
02/16 00:47, , 1F
02/16 00:47, 1F
→
02/16 00:49, , 2F
02/16 00:49, 2F
→
02/16 00:49, , 3F
02/16 00:49, 3F
推
02/16 01:06, , 4F
02/16 01:06, 4F
推
02/16 01:09, , 5F
02/16 01:09, 5F
→
02/16 01:10, , 6F
02/16 01:10, 6F
→
02/16 01:11, , 7F
02/16 01:11, 7F
推
02/16 01:19, , 8F
02/16 01:19, 8F
→
02/16 01:23, , 9F
02/16 01:23, 9F
→
02/16 01:24, , 10F
02/16 01:24, 10F
推
02/16 01:27, , 11F
02/16 01:27, 11F
→
02/16 01:27, , 12F
02/16 01:27, 12F
→
02/16 01:28, , 13F
02/16 01:28, 13F
推
02/16 19:31, , 14F
02/16 19:31, 14F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章