下面随笔记录了C++对象的生存期知识ios
这种生存期与程序的运行期相同。函数
在文件做用域中声明的对象具备这种生存期。spa
在函数内部声明静态生存期对象,要冠以关键字static 。code
块做用域中声明的,没有用static修饰的对象是动态生存期的对象(习惯称局部生存期对象)。对象
开始于程序执行到声明点时,结束于命名该标识符的做用域结束处。blog
举例代码作用域
1 #include<iostream> 2 3 using namespace std; 4 5 int i = 1; // i 为全局变量,具备静态生存期。 6 7 void other() { 8 9 static int a = 2; 10 11 static int b; 12 13 // a,b为静态局部变量,具备全局寿命,局部可见。 14 15 //只第一次进入函数时被初始化。 16 17 int c = 10; // C为局部变量,具备动态生存期, 18 19 //每次进入函数时都初始化。 20 21 a += 2; i += 32; c += 5; 22 23 cout<<"---OTHER---\n"; 24 25 cout<<" i: "<<i<<" a: "<<a<<" b: "<<b<<" c: "<<c<<endl; 26 27 b = a; 28 29 } 30 31 32 33 int main() { 34 35 static int a;//静态局部变量,有全局寿命,局部可见。 36 37 int b = -10; // b, c为局部变量,具备动态生存期。 38 39 int c = 0; 40 41 cout << "---MAIN---\n"; 42 43 cout<<" i: "<<i<<" a: "<<a<<" b: "<<b<<" c: "<<c<<endl; 44 45 c += 8; other(); 46 47 cout<<"---MAIN---\n"; 48 49 cout<<" i: "<<i<<" a: "<<a<<" b: "<<b<<" c: "<<c<<endl; 50 51 i += 10; other(); 52 53 return 0; 54 55 }
运行结果io
1 运行结果: 2 3 ---MAIN--- 4 5 i: 1 a: 0 b: -10 c: 0 6 7 ---OTHER--- 8 9 i: 33 a: 4 b: 0 c: 15 10 11 ---MAIN--- 12 13 i: 33 a: 0 b: -10 c: 8 14 15 ---OTHER--- 16 17 i: 75 a: 6 b: 4 c: 15