zoukankan      html  css  js  c++  java
  • 构造函数初始化列表

    一、什么是构造函数初始化列表

    构造函数初始化列表,是在构造函数的基础上,后面以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式。例如:

      class A
      {
      public:
          int a;
          int b;
          //一般的构造函数
          A(int x, int y)
          {
              a = x;
              b = y;
          }
      };
    class A
      {
      public:
          int a;
          int b;
          //构造函数初始化列表
          A(int x, int y):a(x),b(y)
          {/*空函数体*/}
      };

    一般的构造函数和构造函数初始化列表有什么区别?

    1、这两个构造函数实现的效果是一样的,都可以实现类内成员变量的初始化

    2、构造函数初始化列表的使用面更广,有些类型数据(const、引用)的初始化操作使用一般的构造函数初始化不了。

    注意:static静态局部变量的初始化不能在参数列表中进行,只能在构造函数内进行

    下面会重点举这方面的例子

    1、类内没有默认构造函数的成员类对象;(构造函数不带参数,即如果类里面的类对象需要初始化,一般的构造函数初始化不了

     

     正确的做法是使用构造函数参数列表,列表里面对类对象进行初始化赋值

    2、类内const成员或引用类型的成员。(const全局静态变量只能在初始化的时候赋值,其它时候赋值不了)

    错误的方法

    正确使用方法

    还有重要的一点是,使用构造函数初始化列表比一般的构造函数效率高,初始化列表会把初始化和赋值放在一起进行,只需要拷贝构造一次,而一般的构造函数需要拷贝构造两次

    使用构造函数初始化列表

    使用一般构造函数

    二、构造函数初始化列表 的顺序问题

     最后在总结一下

    1、一般的构造函数不能初始化自带构造函数的类对象

    2、一般的构造函数不能初始化const变量和引用变量

    3、static变量不能使用列表参数去初始化

    4、使用列表参数初始化类内成员变量的效率会更高

    5、使用列表参数的时候,声明类内变量的前后顺序很重要,在进行初始化的时候,要避免用一个未初始化的参数去初始化另一个参数

     

  • 相关阅读:
    关于width属性max/min-content和fit-content
    director.js实现前端路由
    第一篇博文
    AtCoder Beginner Contest 120 题解
    AtCoder Beginner Contest 121 题解
    AtCoder Beginner Contest 115 题解
    Python中list的复制及深拷贝与浅拷贝探究
    Python中print()函数不换行的方法
    高斯消元法的C++简单实现
    Python中list作为默认参数的陷阱
  • 原文地址:https://www.cnblogs.com/-citywall123/p/12902899.html
Copyright © 2011-2022 走看看