Черновик стандарта C ++ 17 const
подразумевает static
область видимости файла
Это цитата для того, что было упомянуто по адресу: https://stackoverflow.com/a/3709257/895245
C ++ 17 n4659 стандартная редакция 6.5 "Программа и связь":
3 Имя, имеющее область имен (6.3.6), имеет внутреннюю связь, если это имя
- (3.1) - переменная, функция или шаблон функции, которые явно объявлены статическими; или,
- (3.2) - не встроенная переменная энергонезависимого типа с константной квалификацией, которая явно не объявлена как внешняя и не объявлена ранее как имеющая внешнюю связь; или
- (3.3) - член данных анонимного объединения.
Совместимость Приложения C (информативная), C.1.2. Пункт 6: «основные понятия» дает обоснование, почему это было изменено с C:
6.5 [также 10.1.7]
Изменение: имя области видимости файла, которая явно объявлена как const, а не явно объявлена как extern, имеет внутреннюю связь, тогда как в C она будет иметь внешнюю связь.
Обоснование: поскольку const-объекты могут использоваться в качестве значений во время перевода в C ++, эта функция призывает программистов предоставлять явный инициализатор для каждого const-объекта. Эта функция позволяет пользователю помещать константные объекты в исходные файлы, включенные в более чем одну единицу перевода.
Влияние на исходную функцию: изменение семантики четко определенной функции.
Сложность конвертации: семантическая трансформация.
Насколько широко используются: редко.
Смотрите также: Почему const подразумевает внутреннюю связь в C ++, а в C нет?
Что вы, скорее всего, хотите сделать вместо заголовков
Подробно объяснено на: Что означает «const static» в C и C ++?
- до C ++ 17:
extern
в заголовке, определение в файле cpp
- пост C ++ 17: встроенная переменная в заголовке
static
это, вероятно, наиболее перегруженное ключевое слово в C ++. Значение вашего кода широко варьируется в зависимости от того, находится ли он в области пространства имен, в области класса или в области функции. Вы можете уточнить это.