首页 > 代码库 > C++全局和静态变量初始化

C++全局和静态变量初始化

转自:http://www.cnblogs.com/zhenjing/archive/2010/10/15/1852116.html

对于C语言的全局和静态变量,不管是否被初始化,其内存空间都是全局的;如果初始化,那么初始化发生在任何代码执行之前,属于编译期初始化。由于内置变量无须资源释放操作,仅需要回收内存空间,因此程序结束后全局内存空间被一起回收,不存在变量依赖问题,没有任何代码会再被执行!

  C++引入了对象,这给全局变量的管理带领新的麻烦。C++的对象必须有构造函数生成,并最终执行析构操作。由于构造和析构并非分配内存那么简单,可以相当复杂,因此何时执行全局或静态对象(C++)的构造和析构呢?

 1 #include<iostream> 2 #include<string> 3 using namespace std; 4  5 class Var { 6 public : 7     Var(const string& str) 8     { 9         name  = str;10         cout<<"初始化:"<<name<<endl;11     }12 13     ~Var(){}14 15     void Print()16     {17         cout<<"Print:"<<name<<endl;18     }19 private:20     string name;21 };22 23 Var VAR1("global var1");24 static Var Var2("static var2");25 26 void Func()27 {28     static Var var3("Func static var3");29     var3.Print();30 }31 32 int main(int argc, char** argv)33 {34     cout<<"Main start..."<<endl;35     VAR1.Print();36     Var2.Print();37     Func();38 39     cout<<"Main end..."<<endl;40     system("pause");41     return 0;42 }43 44 //输出45 //初始化:global var146 //初始化:static var247 //Main start...48 //Print:global var149 //Print:static var250 //初始化:Func static var351 //Print:Func static var352 //Main end...

采用VS2012 编译的结果是:全局变量和文件域的静态变量都将在main开始之前被初始化;只有函数内的局部静态变量才是在第一次使用才初始化的。

C++全局和静态变量初始化