note C 作用域 可見性與生存期

2021-10-04 16:47:49 字數 1632 閱讀 4828

作用域是乙個識別符號(變數、常量、函式等)在程式正文中有效的區域。

函式原型作用域

區域性作用域(塊作用域)

類作用域

全域性作用域(檔案作用域)

命名空間作用域。

即參數列。函式原型中的引數,其作用域始於"(",結束於")"。

例:

double

area

(double radius)

;

區域性作用域舉例

void

fun(

int a)

}

類的成員具有類作用域,其範圍包括類體非內聯成員函式的函式體。

如果在類作用域以外訪問類的成員,要通過類名(訪問靜態成員),或者該類的物件名、物件引用、物件指標(訪問非靜態成員)。

類內常量需要定義為

static

const

typename foobar = val;

//或利用列舉方式,目的都是在編譯時確定好這些常量

enum

;

列舉型別可能會發生識別符號名衝突,在c++11下可以使用enum class或者enum struct,利用作用域分辨符::進行區別。

enum

class

egg;

enum

class

shirt

;

使用時

egg choice = egg::large;

shirt fluo= shirt::large;

可見性是從對識別符號的引用的角度來談的概念,表示從內層作用域向外層作用域「看」時能看見什麼。

可見性:如果某個識別符號在外層中宣告,且在內層中沒有同一識別符號的宣告,則稱該識別符號在內層可見

應用注意事項(僅一點):

巢狀作用域的重名問題域內和域外的同名變數,識別符號使用域內變數。

生存期&作用域同這個識別符號的可見性沒有直接關係。可見性只和巢狀作用域重名問題相關。

對應作用域問題中的檔案作用域的識別符號和static、enum成員

以下這個例子將說明:

靜態生存期意味著程式起止的壽命,不一定和全域性作用域對應,如a,在other()函式內部是內層,出了函式就是外層的a。(可見性的問題)

區域性生存期和區域性作用域對應,如other()中的區域性變數c。

各種壽命的識別符號都要受到可見性的制約,a、b、c都是如此。

#include

using

namespace std;

int i =1;

// i 為全域性變數,具有靜態生存期。

void

other()

intmain()

c 變數的作用域 生存期和可見性

範圍 在乙個函式內部定義的變數,作用範圍只限於本函式體內。生存期 程式執行到本函式才會給區域性變數分配記憶體單元,函式執行完畢區域性變數所佔的儲存單元就被釋放 在函式體外部定義的變數是全域性變數,可以被本檔案所有其他函式訪問使用。作用域 所有檔案。在乙個cpp定義的全域性變數在另乙個cpp中使用,應...

C 之變數的作用域,生存期,可見性

作用域是表示某個識別符號在什麼範圍內有效 可見性是指識別符號是否可見,可引用 生存期,是指程式中的簡單變數和類的物件,它們同自然界中的萬物一樣。也有自己的產生和消亡的生存期,變數和物件的生存期包含靜態生存期和動態生存期。具有靜態生存期的變數和物件,它們的生存期和程式執行相同 除了具有靜態生存期的變數...

作用域與生存期

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