知識點:
在c++中,成員變數的初始化順序只與它們在類中宣告的順序有關,而與初始化列表中的順序無關。
不知道大家知不知道這個,反正我是不知道(或者忘了),我是在《劍指offer》上看到的,後來在《effective c++》中條款4中再次看到,特地在這記錄一下,防止忘記。
下面舉個具體的例子,摘自《劍指offer》:
class a
void print()
};int _tmain(int argc, _tchar* argv)
如果你不懂上面的知識點,肯定一開始和我的答案是一樣的,n1為2,n2為0。如果運用上面的知識點,正確答案是:n1是隨機值,n2是0。所以大家一定要注意了。
為什麼c++要這麼做呢,我查了下資料,引自這篇文章(
感謝作者)的一句話:
因為成員變數的初始化次序是根據變數在記憶體中次序有關,而記憶體中的排列順序早在編譯期就根據變數的定義次序決定了。
c 成員變數的初始化順序
class a void print 輸出 n1 隨機 n2 0 如果把建構函式寫成不是用初始化列表,而是在建構函式體內初始化的形式 a 那麼輸出結果就是n1是2,n2是0 分析 1 成員變數在使用初始化列表初始化時,與建構函式中初始化成員列表的順序無關,只與定義成員變數的順序有關。因為成員變數的初...
C 成員變數的初始化順序
順序為 基類的靜態變數或全域性變數 派生類的靜態變數或全域性變數 基類的成員變數 派生類的成員變數 注意 成員變數在使用初始化列表初始化時,與建構函式中初始化成員列表的順序無關,只與定義成員變數的順序有關。如果不使用初始化列表初始化,在建構函式內初始化時,此時與成員變數在建構函式中的位置有關。類中c...
C 成員變數的初始化順序問題
由於面試題中,考官出了一道簡單的程式輸出結果值的題 如下,cpp view plain copy print?class a void print int main class a void print a 那麼此時輸出結果為 分析 1 成員變數在使用初始化列表初始化時,與建構函式中初始化成員列表的...