C++對象的生存期筆記

  下面隨筆記錄了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
相關文章
相關標籤/搜索