【发布时间】:2021-11-12 04:45:29
【问题描述】:
虚初始化的概念在[basic.life/1]引入和使用,在C++标准的其他地方似乎没有用到:
对象或引用的生命周期是对象或引用的运行时属性。如果一个变量是默认初始化的,并且如果它是类类型或其(可能是多维的)数组,那么该类类型具有一个普通的默认构造函数,则称该变量具有空初始化。
T类型对象的生命周期开始于:
- 获得了具有适合
T类型的正确对齐和大小的存储,并且- 其初始化(如果有)已完成(包括空初始化)([dcl.init]),
由于空初始化是默认初始化的子集,因此对于类和数组类型是初始化,对于标量类型是无初始化(参见[dcl.init.general/7]),因此这两种情况都包含在“初始化(如果有)”这一短语中。
那么为什么需要空初始化的概念呢?
引用似乎等同于这个修改后的版本:
对象或引用的生命周期是对象或引用的运行时属性。
T类型对象的生命周期开始于:
- 获得了与
T类型正确对齐和大小的存储,并且- 其初始化(如果有)已完成 ([dcl.init]),
【问题讨论】:
-
@RichardCritten 谢谢,但该问题已过时,相关条款已在 C++17 标准中更新。
标签: c++ initialization language-lawyer object-lifetime