LINUX.ORG.RU

Инициализация глобальных переменных в C++

 


0

4

Допустим, есть такой код на C++:

ClassA a;
ClassB b(a);
ClassC c(a, b);

Насколько он корректен и нет ли тут UB? Я знаю, что если a, b и c находятся в разных compilation unit, то это будет UB (это логично - линковщик может слинковать файлы в произвольном порядке из каких-то своих соображений и особенности реализации). Но если речь идёт об одном файле? Интересует именно соответствие стандартам, а не только реальное поведение компиляторов (чтобы быть уверенным, что такой код не отвалится в будущем).

★★★★★

Последнее исправление: KivApple (всего исправлений: 1)
Ответ на: комментарий от panter_dsd

Я тоже. Но хочу убедиться, что всё ок. Возможно, тут есть люди, которые таки читали стандарт C++.

KivApple ★★★★★
() автор топика
Ответ на: комментарий от KivApple

Читал бегло. В данном случае, если все последовательно инициализируется, 146% будет хорошо.

panter_dsd ★★★★
()

В пределах одного translation unit инициализация глобальных переменных происходит в порядке объявления.

devsdc ★★
()

Нагуглил, что это норм.

Можно засунуть в один глобальный struct и инициализировать a,b,c в его конструкторе, если хочется ещё больше гарантий.

А вообще, зачем это нужно?

jeuta ★★★★
()

Все ок, по стандарту тут все будет инициализироваться в порядке объявления.

DELIRIUM ☆☆☆☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.