Должны ли статические объекты вообще инициализироваться?

С прагматики языка программирования, Скотт

Время жизни объекта обычно соответствует одному из трех основных механизмов распределения памяти, используемых для управления пространством объекта:

  1. Статическим объектам присваивается абсолютный адрес, который сохраняется на протяжении всего выполнения программы.

  2. Стековые объекты распределяются и освобождаются в порядке "последний пришел - первый вышел", обычно в сочетании с вызовами и возвратами подпрограмм.

  3. Объекты кучи могут быть выделены и освобождены в произвольные моменты времени. Они требуют более общего (и дорогого) алгоритма управления хранилищем.

Например, в C статические объекты должны быть инициализированы с помощью константных выражений (выражений, которые могут быть оценены во время компиляции).

Я не уверен, так ли это на других языках и даже на каких других языках есть статические объекты.

Вообще, статические объекты должны быть инициализированы? При инициализации они должны быть инициализированы с помощью выражений, которые можно оценить во время компиляции?

Под инициализацией я подразумеваю либо явное, либо неявное (то есть автоматически выполняемое языковой реализацией), а не деинсталляция. Итак, перефразируя мой вопрос: в целом, могут ли статические объекты оставаться неинициализированными либо программами, либо компиляторами?

Благодарю.

1 ответ

static переменная будет инициализирована на ноль автоматически, если вы явно не инициализируете ее.

Кроме этого и части времени жизни или связи, она ничем не отличается от любой другой переменной, что означает, что вы можете инициализировать ее так же, как инициализируете любую другую переменную.

Другие вопросы по тегам