gpt4 book ai didi

c++ - C++函数中静态变量的生命周期是多少?

转载 作者:太空宇宙 更新时间:2023-11-04 12:47:38 26 4
gpt4 key购买 nike

如果一个变量在函数范围内被声明为static,它只会被初始化一次,并在函数调用之间保留它的值。它的生命周期究竟是多少?它的构造函数和析构函数什么时候被调用?

void foo() 
{
static string plonk = "When will I die?";
}

最佳答案

函数 static 变量的生命周期从程序流第一次遇到声明[0] 开始,到程序终止时结束。这意味着运行时必须执行一些簿记,以便仅当它实际构造时才销毁它。

此外,由于标准规定静态对象的析构函数必须按照其构造完成的相反顺序运行[1],而构造顺序可能取决于具体的程序运行, 必须考虑构造顺序。

示例

struct emitter {
string str;
emitter(const string& s) : str(s) { cout << "Created " << str << endl; }
~emitter() { cout << "Destroyed " << str << endl; }
};

void foo(bool skip_first)
{
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
Created in foo
Destroyed in foo

C:>sample.exe 1
Created in if
Created in foo
Destroyed in foo
Destroyed in if

C:>sample.exe 1 2
Created in foo
Created in if
Destroyed in if
Destroyed in foo

[0] 由于 C++98[2] 没有引用多线程,这在多线程中的表现如何线程环境未指定,可能会出现问题 Roddy提及。

[1] C++98 部分 3.6.3.1 [basic.start.term]

[2] 在 C++11 中,静态变量以线程安全的方式初始化,这也称为 Magic Statics .

关于c++ - C++函数中静态变量的生命周期是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50611310/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com