C++中的默认初始化

当没有通过初始化器构造一个对象时,那么将会执行默认初始化。

语法

  1. T object

  2. new T

默认初始化出现在以下几种情况中:

  1. 当一个自动,静态,或者线程存储周期的变量声明时没有初始化器。

  2. 当通过 new 创建一个没有初始化器的动态存储周期的对象。

  3. 当一个基类或者非静态成员没有在构造器初始化列表中被涉及到且这个构造器刚好被调用。

默认初始化的效果是如下几种:

  1. 如果 T 是一个 Class 类型,将会考虑该类的构造器,并且对空实参列表的构造器进行重载解析。

  2. 如果 T 是一个数组类型,那么每一个成员将会执行默认初始化。

  3. 否则,将不会执行初始化。

const 对象的默认初始化

如果要默认初始化带 const 的类型为 T 的对象,那么 T 必须是 const-default-constructible 或者数组里的成员是 const-default-constructible

如果默认初始化 T 时会调用一个用户提供的构造器(不是从基类继承而来,从 C++11 开始)或者

  1. 每一个直接的非变体非静态成员 M 拥有一个默认成员初始化器(default member initializer),或者 M 是 class 类型 X 且 X 是 const-default-constructible,数组同理。

  2. 如果 T 拥有至少有一个非静态成员的 union,且刚好有一个变体成员(变体成员 variant member)拥有默认成员初始化器。

  3. 如果 T 不是 union,对于每一个至少拥有一个非静态数据成员的匿名 union 来说,刚好一个非静态数据成员拥有默认成员初始化器。

并且每一个可能被构造的 T 的基类也是 const-default-constructible。那么 T 就是 const-default-constructible

参考

posted @ 2023-02-12 09:47  atorli  阅读(185)  评论(0)    收藏  举报