代码改变世界

C++ 构造函数 初始化列表

2013-08-08 08:19  古悦  阅读(195)  评论(0)    收藏  举报

构造函数初始化列表:

 1 class CTest
 2 
 3 {
 4 
 5 private 6 
 7   int x;
 8 
 9   int y;
10 
11 public:
12 
13    CTest()
14 
15    {
16 
17         x = 1;
18 
19         y  =2;
20 
21    }
22 
23    CTest():x(1),y(2)
24 
25   {
26 
27   }
28 
29 };
View Code

1. 赋值和初始化的区别:

 I:基本数据类型和复合类型(指针,引用):在初始化列表和 构造函数体内,在性能和结果上都是一致的

 II:自定义类型(类类型): 性能和结果上都存在差别,因为类类型的数据成员对象在进入函数体前已经构造完成,也就是说在成员初始化列表处进行构造对象的工作,

     调用构造函数,在进入函数体之后,进行的是对已经构造好的类对象的赋值,又调用个拷贝赋值操作符才能完成(如果并未提供,则使用编译器提供的默认按成员赋值行为)

2. 初始化列表的初始化顺序: 

    C++初始化类成员时,是按照声明的顺序初始化的,而不是按照出现在初始化列表中的顺序。

    所以 如果使用初始化列表时,应该按照声明的顺序进行罗列,以免产生意想不到的错误。