当没有通过初始化器构造一个对象时,那么将会执行默认初始化。
语法
-
T object
; -
new T
;
默认初始化出现在以下几种情况中
-
当一个自动,静态,或者线程存储周期的变量声明时没有初始化器
-
当通过new创建一个没有初始化器的动态存储周期的对象
-
当一个基类或者非静态成员没有在构造器初始化列表中被涉及到且这个构造器刚好被调用。
默认初始化的效果是如下几种
-
如果T是一个class类型,将会考虑该类的构造器,并且对空实参列表的构造器进行重载解析。
-
如果T是一个数组类型,那么每一个元素将会执行默认初始化。
-
否则,将不会执行初始化。
const对象的默认初始化
如果要默认初始化带const
的类型为T的对象,那么T必须是const-default-constructible或者数组里的成员是const-default-constructible。
如果默认初始化T时会调用一个用户提供的构造器(不是从基类继承而来 从C++11开始
)或者
-
每一个直接的非变体非静态成员M拥有一个默认初始化器,或者M是class类型X且X是const-default-constructible,数组同理。
-
如果T拥有至少一个非静态成员的union,且刚好有一个变体成员(变体成员(variant member))拥有默认成员初始化器
-
如果T不是union,对于每一个至少拥有一个非静态数据成员的匿名union来说,刚好一个非静态数据成员拥有默认初始化器
并且每一个可能被构造的T的基类也是const-default-constructible。那么T就是const-default-constructible。