作用域與生命週期

2021-09-11 16:27:09 字數 1348 閱讀 4854

在c++語言中名字有作用域,物件(變數)有生命週期。

如果不理解這兩個概念那麼我們一般會犯很多低階的錯誤。比如返回區域性物件的引用等。

#include

using

namespace std;

//return local array

int*

func1()

;return a;

}//return local object reference

int&

func2()

intmain()

//強龍扭不過地頭蛇

#include

using

namespace std;

int i =0;

intmain()

名字的型別

作用域自動物件(棧物件、區域性物件)

定義的塊內

全域性物件

若不使用extern說明則檔案內,使用則多檔案可見

全域性靜態物件

檔案內區域性靜態物件

定義塊內

例1:

int sp =

666;

#include

using

namespace std;

int i =0;

//[全域性物件]本檔案可見,其他檔案若是不做extern說明則不可見

static

int j =9;

//[全域性靜態物件]本檔案可見

void

func

(int a)

//[a自動物件],塊內可見

intmain()

物件型別

生命週期

自動物件(棧物件)

從定義語句開始到塊末尾結束

全域性物件

從程式開始到程式結束

靜態物件

從程式開始到程式結束

堆物件從申請語句開始到釋放語句結束

例2

#include

#include

using

namespace std;

int a;

//[全域性物件]

static

int b;

//[靜態物件]

void

func

(int c)

//[自動物件/區域性物件/棧物件]

intmain

(void

)

[1]《c++ primer》

作用域與生命週期

作用域與生命週期是描述了常量,變數,函式的等物件的使用範圍,當程式 中這些物件一旦超過了這個範圍,那麼將出現編譯錯誤。下面我們來研究一下它 區域性作用域描述的是函式體中變數和函式的適用範圍,每乙個函式都有自己的區域性作用域。在函式體中定義的變數,函式對於外部函式是不可見的看,因為他們在函式的區域性作...

作用域 生命週期

作用域 能夠被使用的範圍 生命週期 生命的誕生和死亡 在類裡頭,先使用變數,後期到main裡幫助建立生命 在main裡頭作用域的範圍小於等於生命週期的範圍,在使用作用域之前已經預設存在生命週期了 作用域是不考慮生命週期的,因為作用域的線路比執行時候來的條數廣 作用域是製造多條線路,生命週期是執行一條...

作用域和生命週期

1.作用域 可見性 作用域 可見性 指識別符號能夠被使用的範圍 只有在作用域內識別符號才可以被使用。此階段針對編譯和鏈結過程 1 函式中定義的識別符號,包括形參和函式體中定義的區域性變數,作用域都在該函式內,也稱作函式域。2 檔案作用域也稱全域性作用域。定義在所有函式之外的識別符號,具有檔案作用域,...