C++初级版第5版第60页讨论如何在文件之间共享const变量,如下所示
//file_1.cc
extern const int bufSize = fcn();
//file_1.h
extern const int bufSize;
什么时候定义bufSize ?在file_1.cc上外挂的目的是什么?我知道file_1.cc会定义它,但是同一本书的第45页说,为变量提供初始化程序会覆盖外挂程序,那么为什么有必要在const的定义上有extern呢?
发布于 2014-10-10 01:22:13
根据标准,
具有名称空间作用域(3.3.6)的名称如果名称为.一个非易失性变量,显式声明为
const
或constexpr
,既未显式声明extern
,也未先前声明为具有外部链接。
因此,有一条特殊的规则,即当const
或constexpr
存在时,名称空间作用域上的变量具有内部链接,即使它们本来会有外部链接。我不完全确定这个规则为什么存在,但我怀疑它允许编译器内联const
变量,因此根本不为它们分配任何存储空间。extern
说明符显式地重写了这一点,并使变量再次具有外部链接。
为变量提供初始化程序,将重写外接程序。
现在这有点不同了。默认情况下,变量的声明也是一个定义,但是extern
会取消这一点,这样您就可以在不定义变量的情况下声明变量(也就是说,因为它的定义位于另一个转换单元中)。但是,如果您有一个初始化器,那么它将重写extern
,并且声明再次成为一个定义。这与上面关于内部和外部联系的规则并没有什么关系。
https://stackoverflow.com/questions/26290383
复制相似问题