小怪兽爱吃肉
函数寿命static变量第一次开始[0]程序流遇到声明,并在程序终止时结束。这意味着运行时必须执行一些簿记保存,以便只在实际构造的情况下销毁它。此外,由于标准规定静态对象的析构函数必须以其构造完成后的相反顺序运行。[1]而施工顺序可能取决于具体的程序运行,必须考虑施工顺序。例struct emitter {
string str;
emitter(const string& s) : str(s) { cout <
~emitter() { cout <
if (!skip_first)
static emitter a("in if");
static emitter b("in foo");}int main(int argc, char*[]){
foo(argc != 2);
if (argc == 3)
foo(false);}产出:C:>sample.exe在foo中创建毁于福C:>sample.exe 1在if中创建在foo中创建毁于福毁于C:>sample.exe 1 2在foo中创建在if中创建毁于毁于福[0]自C+98[2]没有引用多个线程在多线程环境中的行为,这是未指定的,并且可能会出现问题,因为罗迪提到。[1] C+98剖面3.6.3.1 [basic.start.Term][2]在C+11中,静态是以线程安全的方式初始化的,这也称为魔术静力学.