Я хочу, чтобы константа в C++ была видимой в нескольких исходных файлах. я могу изображения следующие способы определения его в файле заголовка:Определение глобальной константы в C++
#define GLOBAL_CONST_VAR 0xFF
int GLOBAL_CONST_VAR = 0xFF;
- Некоторые функции returing значение (например,
int get_GLOBAL_CONST_VAR()
) enum { GLOBAL_CONST_VAR = 0xFF; }
const int GLOBAL_CONST_VAR = 0xFF;
extern const int GLOBAL_CONST_VAR;
и в одном исходном файлеconst int GLOBAL_CONST_VAR = 0xFF;
Вариант (1) - это, безусловно, не вариант, вы хотели бы использовать
Вариант (2) - определение экземпляра переменной в каждом файле объекта с помощью заголовочного файла
Option (3) - ИМО над убийства в большинстве случаев
Вариант (4) - во многих случаях может быть не хорошо, так как перечисление не имеет конкретного типа (C++ 0x добавит возможность определить тип)
Таким образом, в наиболее случаях мне нужно t o выберите между (5) и (6). Мои вопросы:
- Что вы предпочитаете (5) или (6)?
- Почему (5) нормально, а (2) нет?
5 против 2: «const» подразумевает внутреннюю связь. Когда вы включаете этот заголовок версии-5 в несколько единиц перевода, вы не будете нарушать «одно правило определения». Кроме того, const позволяет компилятору выполнять «постоянную фальцовку», тогда как значение переменной, не являющейся константой, может измениться. Вариант 6 неверен. Вам также нужно «extern» в файле cpp, чтобы заставить внешнюю связь, иначе вы получите ошибки компоновщика. Преимущество варианта 6 состоит в том, чтобы скрыть значение. Но это также делает невозможным постоянное складывание. – sellibitze