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;
}
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();
}