В области видимости файла нет разницы в C ++. const
делает внутреннюю связь по умолчанию, и все глобальные переменные имеют статическое время жизни. Но первый вариант имеет такое же поведение в C, так что это может быть хорошей причиной для его использования.
Внутри функции вторая версия может быть вычислена из параметров, в C или C ++ она не должна быть константой времени компиляции, как этого требуют некоторые другие языки.
Внутри класса, в основном то же самое, что и для функций, значение const
экземпляра можно вычислить в ctor-initializer-list . static const
устанавливается во время инициализации при запуске и остается неизменным для остальной части программы. (Примечание: код для static
членов выглядит немного иначе, потому что объявление и инициализация разделены.)
Помните, что в C ++ const
означает только для чтения , а не константа . Если у вас есть указатель на const
, то другие части программы могут изменить значение, пока вы не смотрите. Если переменная была определена с помощью const
, то никто не может изменить ее после инициализации, но инициализация все еще может быть сколь угодно сложной.