Глобальные константы в C++
Глобальные константы C++ имеют статическую компоновку. Это отличается от C. При попытке использовать глобальную константу в C++ в нескольких файлах возникает неразрешенная внешняя ошибка. Компилятор оптимизирует глобальные константы, не оставляя места, зарезервированного для переменной.
Один из способов устранить эту ошибку — включить констант-инициализации в файл заголовка и включить этот заголовок в файлы CPP при необходимости так же, как если бы он был прототипом функции. Другая возможность заключается в том, чтобы сделать переменную неконстантной и использовать константную ссылку при оценке.
Следующий пример приводит к возникновению ошибки C2019:
// global_constants.cpp
// LNK2019 expected
void test(void);
const int lnktest1 = 0;
int main() {
test();
}
Затем:
// global_constants_2.cpp
// compile with: global_constants.cpp
extern int lnktest1;
void test() {
int i = lnktest1; // LNK2019
}