天天看點

2012年C++專家進階之五

2012年C++專家進階之五

C++程式設計的時候,用成員初始化清單的方法,來對類成員進行初始化,需要注意的問題。

哪是什麼問題呢?請先看代碼。

class CTest {

public:

         CTest(int x);

         int  m_x;

         int  m_y;

};

CTest::CTest(int  i) : m_y(i), m_x(m_y)

{

}

int main(void)

CTest  test(100);

Printf(“m_x is %d, m_y is %d\n”,test.m_x,test_y);        

運作的結果是什麼?

m_x is 100, m_y is 100

大家可能錯誤以為上面的代碼,首先會做m_y=100,然後做m_x=m_y,最後它們具有相同的值。

編譯器先初始化m_x,然後才是m_y,,因為它們是按這樣的順序聲明的。導緻的結果是m_x值是不可預測的。

使用初始化清單來進行C++初始化類成員,有一個重要特性,就是按照資料成員在類裡的聲明順序進行初始化的,而不是按照出現在初始化清單中的順序進行初始化。

繼續閱讀