[問題] 關於物件內部變數的給值

看板C_and_CPP (C/C++)作者時間15年前 (2011/03/10 22:57), 編輯推噓2(2012)
留言14則, 4人參與, 最新討論串1/2 (看更多)
請問 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)

03/11 00:31, , 1F
你的第一個推論沒錯,建構子可細分為三階段
03/11 00:31, 1F

03/11 00:32, , 2F
第一階段是所有父類別的初始化
03/11 00:32, 2F

03/11 00:32, , 3F
第二階段是所有成員變數的初始化
03/11 00:32, 3F

03/11 00:32, , 4F
第三階段才是大括號裡做的事
03/11 00:32, 4F

03/11 00:34, , 5F
所以能提前利用的就盡量利用
03/11 00:34, 5F

03/11 00:35, , 6F
而第二段,我在 3/e 找不到這條款啊 ...
03/11 00:35, 6F

03/11 01:46, , 7F
最近也在看 他是說你可以用initialier就盡量用
03/11 01:46, 7F

03/11 01:46, , 8F
但有種情況例外 就是很多個內建型態的初始化
03/11 01:46, 8F

03/11 01:47, , 9F
因為你那樣寫麻煩又不意維護 而且對內建型態來說
03/11 01:47, 9F

03/11 01:48, , 10F
assign跟contruct是一樣的 不會有效率差別
03/11 01:48, 10F

03/11 01:49, , 11F
所以叫你這樣寫
03/11 01:49, 11F

03/11 23:17, , 12F
內建型別都是只有「配置記憶體」給他而已,所以會讀取
03/11 23:17, 12F

03/11 23:18, , 13F
到垃圾值XD至於assign串一串對效率有無幫助可能要再討
03/11 23:18, 13F

03/12 19:06, , 14F
感謝樓上諸位大大 感謝感謝:)
03/12 19:06, 14F
文章代碼(AID): #1DUERp6o (C_and_CPP)
文章代碼(AID): #1DUERp6o (C_and_CPP)