默认状态下,const 对象仅在文件内有效。
const int bufSize=512;//输入缓冲区大小
编译器将在编译过程中把用到该变量的地方都替换成对应的值。也就是说,编译器会找到代码中所有用到 bufsize 的地方,然后用 512 替换。
某些时候有这样一种 const 变量,它的初始值不是一个常量表达式,但又确实有必要在文件间共享。这种情况下,我们不希望编译器为每个文件分别生成独立的变量。相反,我们想让这类 const 对象像其他(非常量)对象一样工作,也就是说,只在一个文件中
定义const,而在其他多个文件中声明并使用它。
解决的办法是,对于 const 变量不管是声明还是定义都添加 extern 关键字,这样只需定义一次就可以了:
// file 1.cc 定义并初始化了一个常量,该常量能被其他文件访问
extern const int bufSize =fcn();
// file 1.h 头文件
extern const int bufsize;//与file 1.cc 中定义的 bufsize 是同一个
如上述程序所示,file 1.cc 定义并初始化了 bufsize。因为这条语句包含了初始值,所以它(显然)是一次定义。然而,因为bufsize是一个常量,必须用extern 加以限定使其被其他文件使用。
file 1.h头文件中的声明也由 extern 做了限定,其作用是指明 bufsize 并非本文件所独有,它的定义将在别处出现。
如果想在多个文件之间共享 const 对象,必须在变量的定义之前添加 extern 关键字。
《C++ Primer》 P54 标签:文件,const,定义,对象,C++,file,extern,bufsize From: https://www.cnblogs.com/huvjie/p/18412029