static
при применении к локальной переменной дает этой переменной длительность статического хранения. Это означает, что время жизни justAbool
длится до конца программы, а не до конца вызова функции. Его область действия остается прежней, к нему можно получить доступ только по имени в функции после появления объявления.
justAbool
будет инициализирован (используя предоставленный инициализатор = false
) при первом вызове функции. После этого он сохранит свое предыдущее значение и не будет повторно инициализирован при повторном вызове функции.
Вот некоторые более подробные сведения о продолжительности хранения и времени жизни со ссылками на стандарт.
Если объект имеет длительность статического хранения, это означает, что хранение объекта длится в течение всего времени работы программы (от начала до конца). (3.7.1 [basic.stc.static])
Поскольку bool
— это тип без нетривиального конструктора, его время жизни отражает время его хранения, то есть он живет от начала до конца программы. (3.8 [базовая.жизнь])
Все объекты с статической продолжительностью хранения (включая локальные объекты) инициализируются нулями перед любой другой инициализацией. (6.7/4 [stmt.decl]) [Для локальных объектов с инициализатором это довольно академично, потому что нет возможности прочитать их значение до того, как будет достигнуто их объявление.]
Локальные объекты типа POD с статическим сроком хранения, инициализированные с помощью константных выражений, инициализируются перед входом в их блок, в противном случае локальные объекты с статическим сроком хранения инициализируются, когда управление проходит через их объявление. (6,7/4 снова)
Реализация разрешает, но не требует выполнения ранней инициализации в некоторых ситуациях.
person
CB Bailey
schedule
12.02.2011