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;