https://blog.csdn.net/XIONGXING_xx/article/details/115553291
https://blog.csdn.net/W_Y2010/article/details/120242653
https://blog.csdn.net/baidu_41388533/article/details/109489401
1.对象将在参数列表,就是括号内的代码执行前,给成员变量分配内存;
2.程序流程进入括号内,使用常规的赋值方式将值存储到内存中;
3.进入构造体函数中进行赋值和计算;
这个过程就会引发一些问题:
1)成员变量是一个const对象,那么在分配内存后就不能进行赋值;
2)成员变量是一个引用过对象,构造后也不能被赋值,因此必须在创建时就进行初始化;
3)成员变量是一个类,这个类没有无参构造函数,在初始化时,没有办法进行构造;
4)子类在初始化父类的私有成员时;
实际就是部分成员在初始化和复制操作分开后,会出现问题;
c++提供了一个针对此类问题的解决方法,成员初始化列表。
对于构造函数而言,C++提供了两种变量初始化的方式,在构造器的函数内,在初始化列表中;
class Test
{
private:
string m_str;
const int m_age;
public:
Test(const string &s, int i):m_str(s),m_age(i);
1.编译器会根据类声明的参数顺序去进行执行,和初始化列表里的顺序无关;
2.初始化列表里的代码执行,是在构造函数体之前进行执行的;
直接在构造函数内进行初始化时,会把参数进行拷贝构造,生成临时对象,把临时对象赋值给成员变量,再析构它;
而使用成员初始化列表则直接进行成员变量的构造,少了临时对象生成的步骤;
Original: https://www.cnblogs.com/Albert-lihai/p/16553519.html
Author: Albert_禄遥
Title: 个人学习记录-Cpp基础-成员初始化列表
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/577718/
转载文章受原作者版权保护。转载请注明原作者出处!