在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 檔案作用域也稱全域性作用域。定義在所有函式之外的識別符號,具有檔案作用域,...