Re: [問題] 關於物件內部變數的給值
※ 引述《FAITHY ()》之銘言:
: 請問
: 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
首當其衝會影響到的是 code 的長度, 當你有 10 個成員, 寫成
這樣會變得非常雜亂, 效率倒還不是問題, 用指標成員就可以搞
定.
另外還有一個考量, 使用 initializer list 初始化成員的時候
, 寫的順序必須和成員出現在 class specifier的順序一致, 舉
個例子來說:
class Array
{
private: int *v;
private: size_t size;
public: Array( size_t theSize )
: size( theSize ), v( new int[ size ] )
{ ... }
};
撰寫的人如果忘記了這規則, 可能 bug 找好久都找不出來.
再回到原 po 這個問題, 如果我這樣寫呢?
A::A(int x)
: i5(x), i4(i5), i3(i4), i2(i3), i1(i2)
{}
多個成員初始值都一樣時, 這種易錯的程式碼很容易出現, 為了
避免其發生, 用 assign 來代替copy, 賦值的順序會比較明顯,
不必受制於前面提到的規則:
A::A(int x)
{
i1 = i2 = i3 = i4 = i5 = x;
}
--
◢████ ◢█ ◢██◣ ◢█ ◢███ ◢█ T-ara版怎麼去
████◤ ██ ◢██◣█ ██ ████ ██ s ~> T-ara
█/███ ██ ██ ██ █/█ ◢███ █/█ 歡迎您的光臨
████◤ ██ ██ ██ ██◤ ███◤ ██◤ 恩靜、智妍、孝敏
█/███ ██ █/██◤ ██ █/██ ██ 素妍、居麗、寶藍
████◤ █◤ ◥██◤ █◤ ████◤█◤ 花英 ψmakigoto123
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.121.197.115
推
03/11 03:10, , 1F
03/11 03:10, 1F
→
03/11 03:11, , 2F
03/11 03:11, 2F
推
03/12 16:02, , 3F
03/12 16:02, 3F
推
03/12 18:28, , 4F
03/12 18:28, 4F
→
03/12 19:06, , 5F
03/12 19:06, 5F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章