作用域通常和變量捆綁在一起,限定了變量可用范圍,同時也規定了變量的生命周期:何時創建、何時銷毀。作用域通常分為:全局作用域和局部作用域。
全局作用域(全局變量)
在所用函數體外部定義的變量就是全局變量,具有全局作用域。它在main函數執行前創建,mian函數結束后銷毀。下面的代碼演示了全局變量的創建和銷毀:
1: class World
2: {
3: public:
4: World()
5: {
6: std::cout << "Hello world.\n" ;
7: }
8:
9: ~World()
10: {
11: std::cout << "Goodbye.\n";
12: }
13: };
14:
15: World theWorld ;
16:
17: int main()
18: {
19: std::cout << "Hello from main.\n" ;
20: return 0 ;
21: }
這段代碼的執行結果是 :
theWorld對象在main函數執行前被創建,main結束后銷毀。
局部作用域(局部變量)
局部作用域是一對大括號包圍的區域,局部變量在在程序流進入其作用域時被創建,退出作用域時被銷毀。下面一段代碼演示了局部變量的創建和銷毀:
1: class World
2: {
3: public :
4: World(int id)
5: :identifier(id)
6: {
7: std::cout << "Hello from " << identifier << ".\n" ;
8: }
9:
10: World ()
11: :identifier(0)
12: {
13: std::cout << "Hello from default constructor .\n" ;
14: }
15: ~World()
16: {
17: std::cout << "Goodbye from " << identifier << ".\n" ;
18: }
19:
20: private:
21: const int identifier ;
22: };
23:
24: World theWorld ;
25:
26: int main()
27: {
28: World smallworld(1);
29:
30: for(int i = 2 ; i < 4 ; i ++)
31: {
32: World aWorld(i);
33: }
34:
35: World oneMoreWorld(4);
36: }
執行結果為:
說明:
- 為類World添加了一個常量成員identifier,用來標識World的不同實例。identifier在構造函數的前導中初始化。
- 執行時,在main前調用默認構造函數創建theWorld
- 進入main函數,首先創建smallWorld(identifier = 1),smallWorld的是main函數內的局部變量,作用域是整個main函數
- 進入for循環局部作用域,創建和銷毀了identifier = 2和identifier = 3的World兩個實例
- for作用域結束,進入到main局部作用域,創建局部變量oneMoreWorld (identifier = 4)
- main作用域結束,銷毀main作用域內的局部變量。銷毀局部變量時和創建的順序相反,即先銷毀oneMoreWorld,然后是smallWorld
- 最后程序執行到末尾,銷毀全局變量theWorld.
總結
最近在看《程序員修煉之道》,里面說:“程序員向別人解釋他所做的事情都會有困難。”。自己知道,但是寫出來或者講述給別人,對於我來說確實有點困難。寫篇博客都費勁…,中學時候的語文沒學好啊。以后要加強鍛煉,堅持寫下去!