часто в заголовках я вижу
//global namespace, not in class
static const int my_global =1984;
но недавно я узнал, что const подразумевает внутреннюю связь, поэтому мне интересно, не делает ли это статическую ненужной?
Это зависит. В C ++ это не нужно, но некоторые люди (включая меня) любят вставлять это, говоря, что мы имеем в виду. И, конечно, если заголовок также будет использоваться в C, это необходимо (но для многих применений в C вам понадобится #define
).
В C ++ нет необходимости (избыточно) иметь ключевое слово static для предотвращения глобального связывания, поскольку const делает это для стандарта C ++ (C ++ 98, C ++ 03, C ++ 11). Однако в Си ключевое слово static необходимо, чтобы переменная имела локальную (файловую) связь. Поскольку многие практики кодирования на C были перенесены в C ++ по привычке (существует много совпадений), некоторые люди могут перенести эту привычку, не задумываясь. Я слышал, как утверждается, что избыточное статическое ключевое слово в C ++ для обозначения неглобальной связи помогает программистам на C понять.
Я сам предпочитаю точность программирования на C ++ с идиомами C ++, чтобы мы не увековечили код C в C ++, что может привести к незначительным ошибкам или, по крайней мере, к ненужному и избыточному коду (например, к обычной проверке NULL перед вызовом delete). на указатель.