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