下面隨筆記錄了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