|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
10.03.2015, 05:24 | #1 |
Форумчанин
Регистрация: 14.12.2012
Сообщений: 668
|
Порядок инициализации глобальных переменных
Здравствуйте.
1.cpp: Код:
Код:
|
10.03.2015, 07:01 | #2 |
Форумчанин
Регистрация: 14.12.2012
Сообщений: 668
|
В общем проверил опытным путём:
g++ 1.cpp 2.cpp S2::i2 == 43 g++ 2.cpp 1.cpp S2::i2 == 0 никаких гарантий. |
10.03.2015, 07:23 | #3 |
Форумчанин
Регистрация: 14.12.2012
Сообщений: 668
|
Интересный, на мой взгляд, случай нашёл http://stackoverflow.com/questions/2...lization-order:
2.cpp Код:
Код:
программа падает. g++ 1.cpp 2.cpp выдаёт test1 Причины понятны, просто я к тому, что надо быть осторожней. Последний раз редактировалось 220Volt; 10.03.2015 в 07:28. |
10.03.2015, 07:32 | #4 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,085
|
Мне всегда было интересно: зачем писать корявый код, чтобы потом думать как он будет воспринят компилятором и надеяться, что в следующей версии компилятора его поведение не изменится? Не проще писать нормальный код и не задумываться о таких вещах?
|
10.03.2015, 07:39 | #5 |
Форумчанин
Регистрация: 14.12.2012
Сообщений: 668
|
Я бы с удовольствием писал всё правильно, но я ведь не могу проштудировать весь стандарт. Учусь потихоньку. Плюс, для русскоговорящих порог повыше будет.
|
10.03.2015, 13:19 | #6 |
Регистрация: 26.02.2015
Сообщений: 6
|
в VS 2010 подобных проблем не возникает
|
10.03.2015, 16:19 | #7 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
Код:
(инициализация безопасна в многопоточном среде). Последний раз редактировалось _Bers; 10.03.2015 в 16:22. |
|
10.03.2015, 16:22 | #8 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
|
10.03.2015, 22:30 | #9 |
Форумчанин
Регистрация: 14.12.2012
Сообщений: 668
|
Для полноты:
Без опасений можно объявлять глобальные constexpr переменные и static constexpr Код:
|
11.03.2015, 17:29 | #10 |
Форумчанин
Регистрация: 14.12.2012
Сообщений: 668
|
Я чуть-чуть не по теме:
Чего-то я въехать не могу, что происходит? Код:
Cont::const S:: destr S:: destr Cont:: destr Это на mingw, clang и gcc выдают иной результат. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
порядок вызова конструкторов глобальных объектов через границы единиц трансляции | rrrFer | Общие вопросы C/C++ | 10 | 06.09.2014 21:52 |
Обнуление глобальных переменных | g11112 | Общие вопросы Delphi | 2 | 05.08.2013 16:35 |
два вопроса о глобальных переменных | Ksardas13 | Общие вопросы C/C++ | 15 | 08.09.2012 10:31 |
Конфликт глобальных переменных | RRt | C/C++ Сетевое программирование | 3 | 23.08.2012 22:51 |
Обнуление глобальных переменных в VBA | Arkasha69 | Microsoft Office Excel | 1 | 06.09.2010 15:06 |