类中的成员变量的初始化
类的初始化表的初始化顺序是根据成员变量的声明顺序来执行的,而不是按照初始化列表的顺序。
如果我们要按初始化列表的顺序来进行初始化,那么我们就得记住这个顺序,以便在析构时决定析构的顺序。所以C++就选择了简单的点的方法,按成员变量出现的顺序来初始化。
使用初始化列表的优点
C++中, 类成员的初始化在初始化列表中完成, 先于构造函数执行
即成员真正的初始化发生在初始化列表中, 而不是构造函数体中
- 提高效率
假如存在string类型的类成员,在初始化时会调用他的默认构造函数,但如果在构造函数中又对string成员进行了赋值,则相当于又进行了一次string的拷贝构造。
相反,如果放在初始化列表中则只需要调用一次string类的初始化即可
- 有些时候必须使用初始化列表
- 给常量类成员变量赋值
- 给引用类型的成员变量赋值
- 没有默认构造函数的类类型的成员变量
不使用初始化列表,在创建对象调用构造函数之前会对所有的成员变量进行默认初始化,然后再执行构造函数体里的内容。
这样做的话对于没有默认构造函数和变量在声明时便需要被赋值的类型是不适用的。
初始化列表属于函数声明的一部分(构造函数声明),适合于那些在声明时便需要被赋值的变量。