A const definitions have internal linkage ---its a c++ role;
so : //a.cpp
const int ci = 128;
//b.cpp
exern int ci ;
there is a link err. 因为const 的一个默认属性使得ci只在a.cpp 中可见,相当于static const int ci=128;而extern可以抑制const的这个internal linkage 的属性:
//a.cpp
extern const int ci = 128; //notice: it is still a definition ,not a declaration
有一个比较有趣的情况
//a.cpp
const int* pci = 0;
//b.cpp
extern const int* pci;
ok,不会有link err;为什么呢?
我们先来明确,const 修饰的是pci所指的内容,而不是pci ,那么对pci就不会有internal linkage的问题了!
由此你不难能想到 int* const cpi = 0 ;再exern又会有问题了。