Скажем, у меня есть массив, в котором хранятся первые 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] с постоянной времени компиляции ka, он должен будет выполнить фактический поиск в памяти. Мне это не нравится.
Итак, где мне разместить этот массив, чтобы:
как насчет этого?
inline int prime(int i) {
static const int primes[] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29};
return primes[i];
}
PS: Даже "очевидное решение" выше заняло у меня довольно много времени, чтобы написать. Очевидно, константные переменные имеют внутреннее связывание по умолчанию, поэтому мне пришлось добавить extern в файл primes.cpp, чтобы он заработал.