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++初始化类成员,有一个重要特性,就是按照数据成员在类里的声明顺序进行初始化的,而不是按照出现在初始化列表中的顺序进行初始化。