第7章 函式 6

2021-06-02 00:04:03 字數 1225 閱讀 7155

7.5 區域性物件

在函式中定義的形參和變數的名字只位於函式的作用域中:這些名字只在函式體中可見。通常,變數名從宣告或定義的地方開始到包圍它的作用域結束處都是可用的。

7.5.1 自動物件

只用當定義它的函式被呼叫時才存在的物件稱為自動物件(automatic object).自動物件在每次呼叫函式時建立和撤銷。

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

形參也是自動物件。形參所占用的儲存空間在呼叫函式時建立,而在函式結束時撤銷。

自動物件,包括形參,都在定義他們的塊語句結束時撤銷。形參在函式塊中定義,因此當函式執行結束時撤銷。當函式結束時,會釋放它的區域性儲存空間。在函式結束後,自動物件和形參都不能再訪問了。

7.5.2 區域性靜態變數

乙個變數如果位於函式的作用域內,但生命期卻跨越了這個函式的多次呼叫,這種變數往往很有用。則應該將這樣的物件定義為static(靜態的)。

static區域性變數(static local object)確保不遲於在程式執行流程第一次經過該物件的定義語句時進行初始化。這種物件一旦被建立,在程式結束前都不會被撤銷。當定義靜態區域性物件的函式結束時,靜態區域性物件不會撤銷。在該函式被多次呼叫的過程中,靜態區域性物件會持續存在並保持它的值。

int method2()
7.6 內聯函式

1. 內聯函式避免函式呼叫的開銷

在函式返回型別前加上關鍵字inline就可以將函式指定為內聯函式。

內聯說明(inline specification)對於編譯器來說只是乙個建議,編譯器可以選擇忽略這個建議。

一般來說,內聯機制適用於優化小的,只有幾行的而且經常被呼叫的函式。大多數的編譯器都不支援遞迴函式的內聯。

2. 把內聯函式放入標頭檔案

內聯函式應該在標頭檔案中定義,這一點不用於其他函式。

內聯函式的定義對編譯器而言必須是可見的,以便編譯器能夠在呼叫點內聯展開該函式的**。此時,僅有函式原型是不夠的。

內聯函式函式可能要在程式中定義不止一次,只要內聯函式的定義在某個原始檔中只出現一次,而且在所有原始檔中,其定義必須是完全相同的。把內聯函式的定義放在標頭檔案中,可以確保在呼叫函式時所使用的定義是相同的,並且確保在呼叫點該函式的定義對編譯器可見。

在標頭檔案中加入或修改內聯函式時,使用了該標頭檔案的所有原始檔都必須重新編譯。

第7章 函式 7

7.7 類的成員函式 函式原型必須在類中定義。但是,函式體則既可以在類中也可以在類外定義。7.7.1 定義成員函式的函式體 類的所有成員都必須在類定義的花括號裡面宣告,此後,就不能再為類增加任何成員。類的成員函式必須加宣告的一般定義。類的成員函式既可以在類的定義內也可以在類的定義外定義。編譯器隱式地...

第 6章 函式

6.1.2引數 2.引數陣列 c 允許為函式指定乙個 只能乙個 特殊的引數,這個引數必須是函式定義中的最後乙個引數,可用params關鍵字定義他們 如 params int vals 3.引用引數和值引數 理解 將本來在函式中引數按值引用的規則改變成按傳遞引用,使得這個引數會改變,定義引數和傳遞引數...

第6章 函式

1.自動物件 只存在於塊執行期間的物件 2.區域性靜態物件static 在程式執行路徑第一次經過物件定義語句時初始化,並且知道程式終止才被銷毀,如果區域性靜態變數沒有顯示的初始值,初始化為0.3.如果函式無須改變引用形參的值,最好將其生命為常量引用。4.使用引用形參返回額外資訊 5.和其他初始化過程...