C++中extern是指全局的意思。它一般有兩個方面的用途:
1、聲明變量
首先說一下聲明和定義的區別:
①變量的定義:用於為變量分配存儲空間,還可以為變量指定初始值。在一個程序中,變量有且僅有一個定義。
②變量的聲明:用於向程序表明變量的類型和名字。定義也是聲明:當定義變量時我們聲明了它的類型和名字。可以通過使用extern 關鍵字聲明變量名而不定義它。例如:
extern int i; //聲明一個變量i,但是並沒有定義
int i; //聲明並且定義了一個變量i
extern 聲明不是定義,也不分配存儲空間。事實上,它只是說明變量定義在程序的其他地方。程序中變量可以聲明多次,但只能定義一次。
只有當聲明也是定義時,聲明才可以有初始化式,因為只有定義才分配存儲空間。初始化式必須要有存儲空間來進行初始化。如果聲明有初始化式,那麼它可被當作是定義,即使聲明標記為 extern例如:
extern int i = 0;
雖然使用了 extern ,但是這條語句還是定義了i,分配並初始化了存儲空間。只有當extern聲明位於函數外部時,才可以含有初始化式。
因為已初始化的extern聲明被當作是定義,所以該變量任何隨後的定義都是錯誤的:例如:
extern int i = 0; int i; //報錯,重復的定義
同樣,隨後的含有初始化式的extern聲明也是錯誤的:
extern int i = 0; // 定義 extern int i; // 只聲明,正確 extern int i = 0; // 重復定義,錯誤
2、聲明const變量
const 限定符定義的變量是一個常量。例如:
constinti = 0;
定義i為常量並初始化為0。現在這個左值是不可修改的。任何修改i的嘗試都會導致編譯錯誤。例如:
i = 1; // 報錯,不能修改const變量
正是因為常量在定義後就不能被修改,所以定義時必須初始化。例如:
const int i = 0; const int j; // 錯誤,const變量未被初始化
在全局作用域裡定義非 const 變量時,它在整個程序中都可以訪問。我們可以把一個非 const 變更定義在一個文件中,假設已經做了合適的聲明,就可在另外的文件中使用這個變量:
// file_1.cpp int i; // 定義i // file_2.cpp extern int i; // 使用file_1中定義的i i++;
與其他變量不同,除非特別說明,在全局作用域聲明的const變量是定義該對象的文件的局部變量。此變量只存在於那個文件中,不能被其他文件訪問。通過指定const變更為extern,就可以在整個程序中訪問const對象。例如:
// file_1.cpp // 定義並且初始化const變量i extern const int i = 0; // file_2.cpp extern const int i; // 使用file_1中定義的const變量i if(i==0)cout<<"success!"<<endl;//使用file_1中定義的const變量i
本文出自 “我的學習筆記” 博客,請務必保留此出處http://6924918.blog.51cto.com/6914918/1266936