C ++ 17 стандартних чернеток на const
увазі, що стосуються static
файлу
Це цитата, про яку згадувалося на сайті: https://stackoverflow.com/a/3709257/895245
C ++ 17 n4659 стандартний проект 6.5 "Програма та зв'язок":
3 Ім'я, яке має область простору імен (6.3.6), має внутрішні зв'язки, якщо це ім'я
- (3.1) - шаблон змінної, функції або функції, який явно оголошений статичним; або,
- (3.2) - нелінійна змінна типу енергонезалежного типу const, яка не є явно оголошеною зовнішньою, або раніше заявленою, щоб мати зовнішню зв'язок; або
- (3.3) - член даних анонімного об'єднання.
Додаток C (інформативна) сумісність, C.1.2 п. 6: "основні поняття" дає обґрунтування, чому це було змінено з C:
6.5 [також 10.1.7]
Зміни: ім'я області файлу, яка явно оголошена const, а не явно оголошена extern, має внутрішню зв'язок, тоді як у C вона мала б зовнішню зв'язок.
Обгрунтування: Оскільки об'єкти const можуть використовуватися як значення під час перекладу в C ++, ця функція закликає програмістів надати явний ініціалізатор для кожного об'єкту const. Ця функція дозволяє користувачеві розміщувати об'єкти const у вихідних файлах, які входять у більш ніж один блок перекладу.
Вплив на оригінальну особливість: Перехід до семантики чітко визначеної ознаки.
Складність перетворення: семантична трансформація.
Як широко використовується: Рідко.
Дивіться також: Чому const передбачає внутрішню зв'язок у C ++, якщо він не в C?
Що ви, швидше за все, хочете зробити замість заголовків
Детально пояснено на: Що означає "const статична" в C і C ++?
- до C ++ 17:
extern
у заголовку, визначення у файлі cpp
- повідомлення C ++ 17: вбудована змінна на заголовку
static
є, мабуть, найбільш перевантаженим ключовим словом у C ++. Значення вашого коду значно варіюється в залежності від того, чи знаходиться він в області простору імен, в області класу або в області функцій. Ви можете уточнити це.