初始化列表

来源:互联网 发布:ps4网络 编辑:程序博客网 时间:2024/06/18 12:26
#include<iostream>using namespace std;class A{public:    A() :        x(10), y(20), z(x)  //对于const以及引用类型成员变量只能在初始化列表中进行初始化    {        x = 100;        //y=200;  //错误: 向只读成员‘A::y’赋值        z = y;    }    A(int x, int y, int z) :        x(x), y(y), z(z)    {    }    void out()    {        cout << "x:" << x << endl;        cout << "y:" << y << endl;        cout << "z:" << z << endl;    }private:    int x;    const int y;    int &z;};void main(){    A a;    a.out();}

初始化列表顺序:
1. 成员变量在使用初始化列表初始化时,与构造函数中初始化成员列表的顺序无关,只与定义成员变量的顺序有关。因为成员变量的初始化次序是根据变量在内存中次序有关,而内存中的排列顺序早在编译期就根据变量的定义次序决定了。这点在EffectiveC++中有详细介绍。
2. 如果不使用初始化列表初始化,在构造函数内初始化时,此时与成员变量在构造函数中的位置有关。
3. 初始化列表优于构造函数体内赋值执行,并且构造函数体内赋值会带来额外的开销,效率会低于构造函数初始化列表。

class A  {  private:      int n1;      int n2;  public:     //初始化列表     A():        n2(0),n1(n2+2)    {    }     //赋值     //A()      //{      //    n2 = 0;      //    n1 = n2 +2;      //}     void Print()    {          cout << "n1:" << n1 << ", n2: " << n2 <<endl;        }  };  void main()  {      A a;      a.Print();}  
原创粉丝点击