Должны ли статические объекты вообще инициализироваться?
С прагматики языка программирования, Скотт
Время жизни объекта обычно соответствует одному из трех основных механизмов распределения памяти, используемых для управления пространством объекта:
Статическим объектам присваивается абсолютный адрес, который сохраняется на протяжении всего выполнения программы.
Стековые объекты распределяются и освобождаются в порядке "последний пришел - первый вышел", обычно в сочетании с вызовами и возвратами подпрограмм.
- Объекты кучи могут быть выделены и освобождены в произвольные моменты времени. Они требуют более общего (и дорогого) алгоритма управления хранилищем.
Например, в C статические объекты должны быть инициализированы с помощью константных выражений (выражений, которые могут быть оценены во время компиляции).
Я не уверен, так ли это на других языках и даже на каких других языках есть статические объекты.
Вообще, статические объекты должны быть инициализированы? При инициализации они должны быть инициализированы с помощью выражений, которые можно оценить во время компиляции?
Под инициализацией я подразумеваю либо явное, либо неявное (то есть автоматически выполняемое языковой реализацией), а не деинсталляция. Итак, перефразируя мой вопрос: в целом, могут ли статические объекты оставаться неинициализированными либо программами, либо компиляторами?
Благодарю.
1 ответ
static
переменная будет инициализирована на ноль автоматически, если вы явно не инициализируете ее.
Кроме этого и части времени жизни или связи, она ничем не отличается от любой другой переменной, что означает, что вы можете инициализировать ее так же, как инициализируете любую другую переменную.