自動物件和靜態區域性物件

2022-02-19 15:56:16 字數 778 閱讀 9090

1、自動物件

預設情況下,區域性變數的生命期侷限於所在函式的每次執行期間。只有當定義它的函式被呼叫時才存在的物件稱為自動物件。自動物件在每次呼叫函式時建立和撤銷。該型別區域性變數儲存在棧上,在動態儲存區。

區域性變數所對應的自動物件在函式控制經過變數定義語句時建立。如果在定義時提供了初始化,那麼每次建立物件時,物件都會被賦予指定的初值。對於未初始化的內建型別區域性變數,其初值不確定。當函式呼叫時結束,自動物件就會被撤銷。

形參也是自動物件,其所佔儲存空間在函式呼叫時被建立,在函式結束時撤銷。

2、靜態區域性物件

用static關鍵字修飾的區域性變數。靜態區域性變數儲存在靜態儲存區,生命期貫穿整個程式執行期間。作用域同自動區域性變數。靜態區域性物件在所處模組初次執行時進行初始化工作,且只初始化一次。如果不初始化,編譯器會自動為其賦初始值為0或空字元。

如:

1 #include 2

using

namespace

std;34

int gel(void)8

9int main(void

)13 cout <14//

輸出 0 1 2 3 4 5 6 7 8 9

15return0;

16 }

第一點:對c++程式設計師來說,「變數」和「物件」一般可以互換使用。

第二點:兩者有明顯區別,形參和函式體內部定義的變數統稱為區域性變數,區域性變數的生命週期依賴於定義的方式。乙個普通的區域性變數就是自動物件,但乙個靜態區域性變數就不是自動物件,因為它不會在程式執行到它定義所在的塊的末尾時就被銷毀。

C 之區域性物件(自動物件和靜態區域性物件)

1 自動物件 預設情況下,區域性變數的生命期侷限於所在函式的每次執行期間。只有當定義它的函式被呼叫時才存在的物件稱為自動物件。自動物件在每次呼叫函式時建立和撤銷。該型別區域性變數儲存在棧上,在動態儲存區。區域性變數所對應的自動物件在函式控制經過變數定義語句時建立。如果在定義時提供了初始化,那麼每次建...

C 之全域性物件,區域性物件,靜態區域性物件

先說兩個概念 作用域 scope 和生命週期 lifetime 作用域 名字的作用域指的是知道該名字的程式文字區域 生命週期 物件的生命週期指在程式執行過程中物件存在的時間 全域性物件,顧名思義是全域性的物件,其作用域是整個程式文字,其物件的宣告週期是整個程式的執行過程 區域性物件 一般說的區域性變...

非區域性靜態物件

使用未被初始化的物件無異於蠻幹。建構函式可以確保物件在建立時被初始化,難道不是這樣嗎?是,也不是。在某個特定的被編譯單元 即原始檔 中,可能一切都不成問題 但如果在某個被編譯單元中,乙個物件的初始化要依賴於另乙個被編譯單元中的另乙個物件的值,並且這第二個物件本身也需要初始化,事情就會變得更複雜。例如...