У переменной на уровне пространства имён static меняет внешнее связывание на внутреннее. Длительность хранения не меняется: глобальная переменная и без static существует всё время работы программы.
Как static меняет свойства глобальной переменной
У переменной на уровне пространства имён static меняет внешнее связывание на внутреннее. Длительность хранения не меняется: глобальная переменная и без static существует всё время работы программы.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Опишите, какие изменения произойдут в области видимости и времени жизни глобальной переменной, если к её объявлению добавить ключевое слово static.
# include <iostream>
int gVar; // добавить static и проанализировать влияние
Объясните, как изменятся связь переменной с другими единицами трансляции и её период существования в программе.
Ответ
У переменной на уровне пространства имён static меняет внешнее связывание на внутреннее. Длительность хранения не меняется: глобальная переменная и без static существует всё время работы программы.
Имя static int gVar; обозначает отдельный объект внутри своей единицы трансляции. Объявление extern int gVar в другом исходном файле не позволяет обратиться именно к нему.
Нулевая инициализация для показанного int сохраняется. Если поместить такое определение в заголовок, каждый включивший его .cpp получит собственный экземпляр; это не общая переменная для всей программы. Область видимости и связывание — связанные, но разные понятия.