作用域是乙個識別符號(變數、常量、函式等)在程式正文中有效的區域。
函式原型作用域
區域性作用域(塊作用域)
類作用域
全域性作用域(檔案作用域)
命名空間作用域。
即參數列。函式原型中的引數,其作用域始於"(",結束於")"。
例:
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 檔案作用域也稱全域性作用域。定義在所有函式之外的識別符號,具有檔案作用域,作用域為從定義處到...