c++ primer 5rd中有这样一句话:
By default, const objects are local to a file.
什么意思呢?就是说,const对象默认情况下只是某一个文件的局部变量。即使它被定义在一个文件的最前面(类似于全局定义),它也仍然是一个local object。
这里不同于普通的变量特性(在一个文件中定义一个全局变量,在另一个文件中使用它时只要声明一下,加上关,键字extern即可,参见http://blog.csdn.net/happy_xiahuixiax/article/details/51044897)
看代码:
1.cpp:
const int a = 4;
2.h:
extern const int a;
3.cpp:
#include <iostream>
#include "2.h"
int main()
{
// extern const int a;
// print();
// std::cout << std::endl;
std::cout << a << std::endl;
}
编译报错:
xiahuixia@xiahuixia-Inspiron-3437:~/c++/primercode$ g++ -o const_extern_test 1.cpp 2.h 3.cpp
/tmp/cclvj9M8.o: In function `main':
3.cpp:(.text+0x6): undefined reference to `a'
collect2: error: ld returned 1 exit status
看到了吗?编译器报错:a没有定义。
那么如何在多文件中共享const object呢?
c++ primer是这么说的:to share a const object among multiple files, you must define the variable as extern.
1.cpp应该改为:
1.cpp:
extern const int a = 4;