1. 程式人生 > >自動對象和靜態局部對象

自動對象和靜態局部對象

編譯器 指定 執行 static關鍵字 post ati 調用 c++程序 模塊

1、自動對象
默認情況下,局部變量的生命期局限於所在函數的每次執行期間。只有當定義它的函數被調用時才存在的對象稱為自動對象。自動對象在每次調用函數時創建和撤銷。該類型局部變量存儲在棧上,在動態存儲區。
局部變量所對應的自動對象在函數控制經過變量定義語句時創建。如果在定義時提供了初始化,那麽每次創建對象時,對象都會被賦予指定的初值。對於未初始化的內置類型局部變量,其初值不確定。當函數調用時結束,自動對象就會被撤銷。
形參也是自動對象,其所占存儲空間在函數調用時被創建,在函數結束時撤銷。
2、靜態局部對象
用static關鍵字修飾的局部變量。靜態局部變量存儲在靜態存儲區,生命期貫穿整個程序運行期間。作用域同自動局部變量。靜態局部對象在所處模塊初次運行時進行初始化工作,且只初始化一次。如果不初始化,編譯器會自動為其賦初始值為0或空字符。

如:

 1 #include <iostream>
 2 using namespace std;
 3 
 4 int gel(void){
 5     static int cnt = 0;
 6     return cnt++;
 7 }
 8 
 9 int main(void){
10     for(int i = 0; i < 10; i++){
11         cout << gel() << " ";
12     }
13     cout << endl;
14     //輸出 0 1 2 3 4 5 6 7 8 9
15 return 0; 16 }

第一點:對C++程序員來說,“變量”和“對象”一般可以互換使用。
第二點:兩者有明顯區別,形參和函數體內部定義的變量統稱為局部變量,局部變量的生命周期依賴於定義的方式。一個普通的局部變量就是自動對象,但一個靜態局部變量就不是自動對象,因為它不會在程序執行到它定義所在的塊的末尾時就被銷毀。

自動對象和靜態局部對象