怎样把const常量实现文件间共享?
之所以会先提起这个问题,当然和要解决的问题息息相关。你也许不禁会问:难道const常量不是文件间共享的吗?当然不是,原因是const常量的特殊性。下面我们看看c++ primer的作者怎么说的(重点!):
/——–
当以编译时初始化的方式定义一个const对象时,例如:
const int bufSize = 512;
编译器将在编译过程中把用到该变量的地方都替换成对应的值,也就是说编译器会找到程序中所有用到bufSize的地方,然后用512替换。
为了执行上述替换,编译器必须知道变量的初始值。如果程序包含多个文件,则每个用了const变量的文件都必须得能访问到他的初始值才行。要做到这一点就必须在每一个用到这个量的文件中都对他有定义。为了支持这一用法,同时避免对同一变量的重复定义,默认情况下,const对象被设定为仅在文件内有效(即不是文件间共享的)。从而,当多个文件中出现了同名的const变量时,其实等同于在不同文件中分别定义了独立的变量。
——–/
作者说的很清楚,const变量在不同文件中自己是自己的互不相干!但是程序的写法千变万化,总会有例外的需求,所以:
/——-
某些时候有这样一种const变量,他的初始值不是一个常量表达式,但确实有必要再文件间共享。这种情况下,我们不希望编译器为每个文件分别生成独立的变量。想反,我们想让这些const对象像其他对象(非常量)一样工作(即在文件间共享),也就是说只在一个文件中定义,而在其他多个文件声明并使用它。
——-/
下面给出解决方法:
对const变量不管声明还是定义都添加extern关键字,这样只需要定义一次就可以了。
对解决方法的认识:
其实就是在定义const变量的时候显式的用extern说明了我定义的这个常量是要在文件间共享的,而非默认情况下的当前文件独有。这样的话仅在其他文件中声明一下就可用同一个const变量,这正实现了和其他变量定义声明实现的相同效果!
下面来一个例子