如果一个全局变量被初始化两次(静态,然后是动态),哪个初始化开始它的生命周期?
受到这个问题的启发。
我们知道具有非constexpr初始化器的全局变量会经历两种不同的“初始化”:
- 首先是“静态初始化”,它对它们进行零初始化。
- 其次,“动态初始化”,它使用用户提供的初始化程序。
哪些初始化启动了变量生命周期?[basic.life]令人惊讶的是无益的:
对象的生命周期......开始于:......它的初始化(如果有)完成
我看到几个选项:
- 最后一次初始化开始生命周期。
- 第一次初始化开始生命周期。
- 每次连续初始化都会破坏现有对象并在其位置创建一个新对象。
(1) 最有意义,但它会使稍后动态初始化的对象的静态初始化几乎无用。
(2)会产生有趣的效果。例如,静态初始化命令失败突然不再是 UB(本身)了。
(3) 会很奇怪。
THE END
二维码