C++构造函数和初始化列表的区别

今天在写程序的时候发现有类里有引用类型的时候并不能使用构造函数初始化,只能使用初始化列表赋值。在此总结一下。

构造函数其实分为两个阶段:(1) 初始化阶段  (2) 计算阶段。在初始化阶段所有变量都会初始化,会调用默认的构造函数。在计算阶段会再调用对应的构造函数进行赋值。知道了这个过程为什么引用只能使用初始化列表了。因为在调用默认构造函数的时候并不会对引用进行赋值,而引用是在初始化的时候必须进行赋值的。所以就会出现问题。 这种问题还会出现的场景有:类中存在需要赋值的const变量;类中没有默认构造函数。而初始化列表在赋值的时候还没有进入计算阶段就会进行赋值,还会少调用一次默认构造函数有利于程序的性能。值得注意的是使用初始化列表初始化的时候变量赋值的顺序是和你在列表写的顺序无关的,只会按照类中定义顺序进行初始化。

你可能感兴趣的:(C++构造函数和初始化列表的区别)