Hol*_*Cat 5 c++ language-lawyer
受到这个问题的启发。
我们知道具有非constexpr初始化器的全局变量会经历两种不同的“初始化”:
哪些初始化启动了变量生命周期?[basic.life]令人惊讶的是无益的:
对象的生命周期......开始于:......它的初始化(如果有)完成
我看到几个选项:
(1) 最有意义,但它会使稍后动态初始化的对象的静态初始化几乎无用。
(2)会产生有趣的效果。例如,静态初始化命令失败突然不再是 UB(本身)了。
(3) 会很奇怪。
事实上,该标准是模糊的,因为没有指定所引用的规则“初始化(如果有)完成”如何准确地应用于初始化的多个阶段,每个阶段都被称为“初始化”。这为多种解释留下了空间。
该脚注(非规范)意味着生命周期仅在动态初始化完成后开始:
[基本生活]
在对象的生命周期开始之前但在对象将占用的存储空间已分配之后26 ...
26例如,在动态初始化具有静态存储持续时间的对象之前([basic.start.dynamic])。
| 归档时间: |
|
| 查看次数: |
190 次 |
| 最近记录: |