zoukankan      html  css  js  c++  java
  • [转]C++ 初始化列表的初始化顺序

    构造函数初始化列表仅用于初始化成员的值,并不指定这些初始化执行的次序。成员被初始化的次序就是定义成员的次序。第一个被定义的成员先被初始化,依次类推。一般,初始化的顺序无关紧要,然而,如果一个成员是根据其他成员而初始化,则成员的初始化顺序是至关重要的。

    class x {

    int   i;//声明顺序是先i,后j,故初始化列表中,会先初始化i,在初始化j

    int   j;

    public:

      x(int  tem): j(tem),i(j){}    //看起来是先初始化j,然后初始化i,其实恰恰相反,先用未初始化的j来初始化i,虽然编译器不会提示你什么,但是j未初始化它便由计算机随即分配的内存存储,它的值也是随即的,这个值可能不是你想要的,错误就出现了。将ij的声明顺序调过来就没有问题了。

    };

    总的来说,有虚基类时,初始化列表调用构造函数初始化的顺序如下:

    1)虚基类的构造函数

    2)根据派生类声明的顺序调用派生类的构造函数,对虚基类构造函数的调用被忽略

    3)根据派生类对象声明的顺序调用对象所属派生类的虚基类构造函数、对象所属派生类的构造函数

    无虚基类时,初始化列表调用构造函数初始化的顺序如下:

    1)根据派生类声明的顺序调用对象所属派生类的基类构造函数、接着是派生类的构造函数

    2)根据派生类对象声明的顺序调用对象所属派生类的基类构造函数、对象所属派生类的构造函数

     

    转自:http://blog.sina.com.cn/s/blog_508938e10102v1es.html

  • 相关阅读:
    ServletConfig对象
    Servlet生命周期
    BeanListHandler
    表单校验
    SQL30081N 检测到通信错误。正在使用的通信协议:"TCP/IP"
    交货单寄售发货接口
    PI 7.4/7.5 Alert 配置
    SAP PI soap 方式 头部 传输 wsse:Security wsse:UsernameToken
    smartforms 打印参数 ( 预览 和 不预览直接打印 )设置
    migo增强中获取屏幕值的方法
  • 原文地址:https://www.cnblogs.com/beeasy/p/6372782.html
Copyright © 2011-2022 走看看