C++作用域


作用域通常和變量捆綁在一起,限定了變量可用范圍,同時也規定了變量的生命周期:何時創建、何時銷毀。作用域通常分為:全局作用域和局部作用域。

全局作用域(全局變量)

在所用函數體外部定義的變量就是全局變量,具有全局作用域。它在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:  }

這段代碼的執行結果是 :

image

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:  }

執行結果為:

image

說明:

  1. 為類World添加了一個常量成員identifier,用來標識World的不同實例。identifier在構造函數的前導中初始化。
  2. 執行時,在main前調用默認構造函數創建theWorld
  3. 進入main函數,首先創建smallWorld(identifier = 1),smallWorld的是main函數內的局部變量,作用域是整個main函數
  4. 進入for循環局部作用域,創建和銷毀了identifier = 2和identifier = 3的World兩個實例
  5. for作用域結束,進入到main局部作用域,創建局部變量oneMoreWorld (identifier = 4)
  6. main作用域結束,銷毀main作用域內的局部變量。銷毀局部變量時和創建的順序相反,即先銷毀oneMoreWorld,然后是smallWorld
  7. 最后程序執行到末尾,銷毀全局變量theWorld.

總結

最近在看《程序員修煉之道》,里面說:“程序員向別人解釋他所做的事情都會有困難。”。自己知道,但是寫出來或者講述給別人,對於我來說確實有點困難。寫篇博客都費勁…咬牙切齒,中學時候的語文沒學好啊。以后要加強鍛煉,堅持寫下去!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM