static变量初始化

来源:互联网 发布:php解析html 编辑:程序博客网 时间:2024/06/05 06:34

1.在C++中,全局static变量和class的static成员变量在main函数之前初始化,main函数之后销毁

2. 函数内部的局部static变量在该函数第一次被调用时初始化,在main函数之后销毁

3.对于static数据即使是函数内部的对象则存放在全局数据区,全局数据区的数据并不会因为函数的退出就将空间释放。

#include <iostream>using namespace std;struct Date{Data(){cout<<"create"<<endl;}~Data(){cout<<"destroy"<<endl;}};static Data g_sData;int main(){cout << "main start" << endl;cout << "main end" << endl;return 0;}


output:

create
main begin
main end
destroy

#include <iostream>using namespace std;struct Date{Data(){cout<<"create"<<endl;}~Data(){cout<<"destroy"<<endl;}};class Test{static Data m_sData;};Data Test::m_sData;int main(){cout << "main start" << endl;cout << "main end" << endl;return 0;}

output:

create
main begin
main end
destroy


#include <iostream>using namespace std;struct Date{Data(){cout<<"create"<<endl;}~Data(){cout<<"destroy"<<endl;}};void test(){static Data sData;}int main(){cout << "main start" << endl;cout << "first time call test" << endl;test();cout << "second time call test" << endl;test();cout << "main end" << endl;return 0;}



main begin
first
create
second
main end
destroy


在看一个比较BT的题目。

在系统中只能调用一次函数


void caller(){cout<<"first call\n";}void FirstCall(){static int d = (caller(),1);}int main(){FirstCall();FirstCall();}







原创粉丝点击