2012年C++专家进阶之五

2012C++专家进阶之五

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

你可能感兴趣的:(编程,C++,c,Class,编译器)