Почему объявление статической переменной с непостоянной не дает Error in g ++

 int main ( )
 {
       int a = 1 ;
       static int b = a ;
 }

Этот фрагмент кода дает ошибку в gcc 4.3.2 как

error: элемент инициализации не является константой.

Но он отлично работает на g ++ 4.3.2 .  Кто-нибудь Пожалуйста, объясните, почему это не дает ошибки в g ++ 4.3.2.

14
nl ja de
C и C ++ - разные языки. Различное поведение, стандарты и т. Д .: D
добавлено автор Jack, источник
@Zaffy One компилятор C, другой - компилятор C ++.
добавлено автор delnan, источник
Две версии, которые вы опубликовали, одинаковы
добавлено автор Zaffy, источник
И +1 здесь тоже. Хороший вопрос.
добавлено автор user529758, источник

1 ответы

Потому что он действителен в C ++ (и недействителен в C).

(C ++ 11, 6.7p4) «Постоянная инициализация (3.6.2) блочной области               объект со статической продолжительностью хранения, если это применимо, выполняется до               сначала вводится его блок. [...] В противном случае такая переменная               инициализированный первый контроль времени проходит через его объявление;               такая переменная считается инициализированной после завершения               его инициализации.

19
добавлено
@ user1294203: это именно так. А так как непостоянная инициализация может иметь побочные эффекты (для типов классов), важно, чтобы реализация на самом деле выполняла ее в нужное время во время выполнения.
добавлено автор Steve Jessop, источник
Означает ли это, что static s может быть инициализирован во время выполнения на C ++ или я не правильно понимаю спецификацию?
добавлено автор Grieverheart, источник
pro.cxx
pro.cxx
3 049 участник(ов)

C/C++ chat 0. Простые вопросы, лабы и о IDE — в чат новичков @supapro 1. Не хамим, не переходим на личности, не вбрасываем утверждения без доказательств 2. No Ads, offtop, flood Объявления о вакансиях и евенты - в лс @AlexFails https://t.me/ProCxx/259155

supapro.cxx
supapro.cxx
1 925 участник(ов)

Чат для тех, кто немного знает C++, простые вопросы по реализации, синтаксису и ide – сюда, а для другого есть: /Главный чат по серьезным вопросам — @ProCxx /Чат по обсуждению всего — @fludpac

C++ Russia
C++ Russia
384 участник(ов)

Сообщество разработчиков C++ в Telegram.

cxx.Дискуссионная
cxx.Дискуссионная
298 участник(ов)

это не двач, общайтесь вежливо; разговор на почти любые темы; Не согласны с баном? В лс @AlexFails, @ivario

C++ для маленьких и тупых
C++ для маленьких и тупых
105 участник(ов)

Лоу левел (по среднему IQ участников) чатик ExtremeCode @extremecode Флудилка @extremecode_rest