2010/10/25
關鍵字:聲明、定義、const、引用
頭文件用於聲明而非定義。
頭文件包含在多個源文件中,所以不應該含有變量或函數的定義。
變量、函數定義只可以出現一次,聲明可以出現多次。
extern int val = 10; //雖然有extern但是有初始化式,所以這是一個定義。
double d; //雖然沒有初始化式,但是沒有extern,所以也是定義。
const對象默認爲文件的局部變量。在函數內聲明,則爲函數的局部變量,在全局作用域中聲明則爲文件的局部變量。
在全局作用域中定義非const變量時,它在整個作用域中都可以訪問。
通過指定const變量爲extern,也可以在整個程序中訪問const對象:
file_1.cc
extern const int bufSize = fcn();
file_2.cc
extern const int bufSize;
注意:const對象若想在整個作用域都可以訪問,則必須在聲明時用extern標識,而非const對象則不需要。
不能定義引用類型的引用,可以定義其他類型的引用。
非const引用必須用與引用同類型的對象初始化,而const引用可以綁定到不同但相關的類型的對象或綁定到右值。
int val = 1024;
int &r1 = val; //ok
int &r2 = 1024; //error
int &r3; //error
const int &r4 = 42; //ok
const int &r5 = val + r4; //ok
double dval = 3.14;
const int &r6 = dval;
//編譯器實際是這樣編譯的:
int temp = 42;
const int &4 = temp;
double dval = 3.14;
int temp = dval;
const int &r6 = temp;
當引用初始化後,只要該引用存在,它就保持綁定到初始化時指向的對象。不可能將引用綁定到另一個對象。const引用是指向const對象的引用。
int i = 1024, &ref = i; //i爲整型,ref爲引用。
const val = 1024;
const int &ref = val;