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++初始化類成員,有一個重要特性,就是按照資料成員在類裡的聲明順序進行初始化的,而不是按照出現在初始化清單中的順序進行初始化。