当有时候我们希望定义一种变量,它的值不会被改变。比如定义一个变量表示缓冲区的大小。这样当缓冲区大小不合适的时候,我们可以很方便的调整,另一方面也可以随时防止程序一不小心修改这个值,在C++中,我们可以用const关键字对变量的类型加以限定。
因为const对象一旦建立之后就不可改变,所以const对象必须初始化:
> const int ival = 42; //正确
> const int ival2; //错误:没有初始化
有时候程序会包含多个文件,那么每个用了const对象的文件都必须得能访问它的初始值才行。为了做到这一点,就必须在每一个用到变量的文件中对它进行定义,默认情况下,const对象被设定为仅在当前文件内有效。当多个文件中出现了同名的const变量时候,其实相当于在不同文件中分别定义了独立的对象。在某些时候,const变量的初始值不是一个常量表达式,但又确实有必要在文件间共享。这种情况下,我们不希望编译器为每个文件生成独立的变量。相反的,我们希望这类const对象像其他的对象一样工作,换句话说,我们希望在一个文件中定义const,在多个文件中声明并使用他。
解决的办法就是,对于const变量不管是声明还是定义都添加extern关键字,这样只需要定义一次就可以了:
//file_1.cpp定义并初始化了一个常量,该常量能被其他的文件访问
extern const int bufSize = fcn();
//file_1.h头文件
extern const int bufSize; //与file_1.cpp中定义的bufSize是同一个