Я пишу на C ++ и хочу узнать, как лучше определить переменную const.
Нет «лучшего пути». Это зависит.
Кстати, когда-нибудь слышали о constexpr
?
Насколько я понимаю, если я хочу определить константную переменную в файле cpp, мы можем кодировать так до: const static int LEN = 5;
Да, мы можем.
Обратите внимание, что вещи в области имен, объявленные с ключевым словом static
, имеют внутреннюю связь .
Также обратите внимание, что я не называю LEN
"статической переменной".
И теперь C ++ предлагает нам использовать анонимное пространство имен: namespace { const int LEN = 5; }
Все, что объявлено в анонимном пространстве имен, имеет внутреннюю связь . Но я не думаю, что сам C ++ делает какие-либо предложения.
Я видел несколько кодов в некоторых заголовочных файлах, как показано ниже:
const int LEN = 5;
В C ++ есть специальное условие, согласно которому переменные, определенные в пространстве имен, имеют константные переменные в области имен, по умолчанию имеют внутреннюю связь , даже без спецификатора static
.
См .: https://en.cppreference.com/w/cpp/language/storage_duration#Linkage
Обратите внимание, что он отличается от C.
Также обратите внимание, что это не означает "const
включает static
". Мышление таким образом сбивает с толку.
Почему бы нам не кодировать const static int LEN = 5;
в заголовочном файле?
На самом деле, мы можем. Это может быть даже полезно по нетехническим причинам. Если вы считаете, что ваша аудитория, которая читает ваш код, не знает этого специального положения, спецификатор static
прояснит для вашей аудитории, что переменная имеет внутреннюю связь.