看板 C_and_CPP 關於我們 聯絡資訊
請問 class A { public: A(int){}; private: int i; } A::A(int x):i(x) {} 和 A::A(int x) { i=x; } 差在哪~ 本來看effective c++ 因為後者 做完一次construct後再做assign的動作? ...自己想法是在A做construct前會做變數i的construct?(不過似乎不是這樣) 然後又書中提到當 class A { public: A(int){}; private: int i; int i2; int i3; int i4; int i5; } 最好寫做 A::A(int x) { i=i2=i3=i4=i5=x; } 而非 A::A(int x):i(x),i2(x),i3(x),i4(x),i5(x) {} 請問是為何原故嗎 因為書上有點看不懂... 感謝m(_ _)m -- ※ 發信站: 批踢踢實業坊(ptt.cc) ※ 編輯: FAITHY 來自: 124.8.145.3 (03/10 23:03)
legnaleurc:你的第一個推論沒錯,建構子可細分為三階段 03/11 00:31
legnaleurc:第一階段是所有父類別的初始化 03/11 00:32
legnaleurc:第二階段是所有成員變數的初始化 03/11 00:32
legnaleurc:第三階段才是大括號裡做的事 03/11 00:32
legnaleurc:所以能提前利用的就盡量利用 03/11 00:34
legnaleurc:而第二段,我在 3/e 找不到這條款啊 ... 03/11 00:35
Donze:最近也在看 他是說你可以用initialier就盡量用 03/11 01:46
Donze:但有種情況例外 就是很多個內建型態的初始化 03/11 01:46
Donze:因為你那樣寫麻煩又不意維護 而且對內建型態來說 03/11 01:47
Donze:assign跟contruct是一樣的 不會有效率差別 03/11 01:48
Donze:所以叫你這樣寫 03/11 01:49
tomap41017:內建型別都是只有「配置記憶體」給他而已,所以會讀取 03/11 23:17
tomap41017:到垃圾值XD至於assign串一串對效率有無幫助可能要再討 03/11 23:18
FAITHY:感謝樓上諸位大大 感謝感謝:) 03/12 19:06