Я ожидаю, что s_zzz.m_aPtr и s_zzz.m_val будут инициализированы нулями перед любой другой статической инициализацией в любом другом модуле компиляции, и это гарантировано самим языком.
Он будет инициализирован нулем, так как это статическая переменная времени жизни в области имен.
Эта инициализация нуля происходит перед любой динамической инициализацией (пример динамической инициализации - это когда вы явно инициализируете или класс имеетКонструктор).
Порядок инициализации нуля между различными единицами перевода не определен, но нет никакого способа обнаружить его или положиться на него, поскольку это происходит раньше всего, поэтому это не имеет значения.
С вашей точки зрения 2, довольно неясно, о чем вы спрашиваете.
Но для вашего статического объекта времени жизни эффект состоит в том, что он сначала инициализируется нулями, а затем во время динамической инициализацииконструктор используется, чтобы обнулить его снова (хотя компилятор может бытьдостаточно умен, чтобы оптимизировать эту избыточную дополнительную инициализацию).
Приветствия и hth.,
ERRATA : Бен Фойгт предоставил убедительный пример того, что последний абзацвыше неправильно .Поэтому, пожалуйста, не обращайте внимания.Наличие конструктора означает, что объект может динамически инициализироваться в некоторый момент до, между или после операций, которые его изменяют, что приводит к довольно непредсказуемым результатам…