假设我有一个数组存储前10个素数,如下所示:
const int primes[] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29};
只要我有1.cpp文件,这一切都非常好和简单。但是,如果我有多个.cpp文件,我真的不知道该把这个数组放在哪里。
一个显而易见的解决方案是:
// primes.h:
extern const int primes[10];
// primes.cpp:
extern const int primes[] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29};
然而,这样做的问题在于素数数组不再是编译时常数。假设x.cpp想做一些涉及素数[k]的繁重计算,如果k是编译时间常数,它必须进行实际的内存查找。我不喜欢那样。
那么我该把这个数组放在哪里,这样:
- It s only once in the binary (not once per .cpp file)
- array[SOME_CONSTANT] is also a compile-time constant
Edit
这个怎么样?
inline int prime(int i) {
static const int primes[] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29};
return primes[i];
}
附言:即使是上面的“显而易见的解决方案”也花了我相当长的时间来写。显然,默认情况下const变量有内部链接,所以我不得不在primes.cpp文件中添加“extern”以使其工作。