порядок инициализации статических глобальных переменных - PullRequest
0 голосов
/ 12 января 2019

Во многих ответах, которые я нашел здесь, были сказаны следующие слова:

Глобальные переменные в одной единице перевода (исходный файл) инициализируются в том порядке, в котором они определены.

или

Внутри той же единицы компиляции порядок четко определен: тот же порядок, что и у определения.

и т.д.

Но где я могу увидеть эти слова в стандарте C ++? Я хотел бы получить один или несколько конкретных абзацев, где описывается такое поведение. Я не могу найти его сам и не знаю, к кому обратиться.

1 Ответ

0 голосов
/ 12 января 2019

6.6.3 Динамическая инициализация нелокальных переменных [ basic.start.dynamic ]

  1. Динамическая инициализация нелокальной переменная со статической продолжительностью хранения неупорядочена, если переменная неявно или явно конкретизированная специализация, является частично упорядоченный, если переменная является встроенной переменной, которая не является неявно или явно конкретизированная специализация, а в противном случае приказал. [Примечание: явно специализированные не встроенные статические данные специализация шаблона элемента или переменной имеет упорядоченную инициализацию. - конец примечания]
  2. Динамическая инициализация нелокальных переменных V и W При статической длительности хранения упорядочиваются следующим образом:
    • Если V и W имеет упорядоченную инициализацию и V определяется перед W в пределах единичный блок перевода, последовательность V инициализируется перед инициализация W.
    • Если V имеет частично упорядоченную инициализацию, W не имеет неупорядоченного инициализация, и V определяется перед W в каждой единице перевода в какой W определяется, то
      • если программа запускает поток (4.7) кроме основного потока (6.6.1), инициализация V сильно случается до инициализации W;
      • в противном случае, инициализация V выполняется до инициализации W.
    • В противном случае, если программа запускает поток, отличный от основного поток до того, как V или W инициализируется, это не указано, в котором потоки инициализации V и W происходят; инициализация не упорядочено, если они встречаются в одном потоке.
    • В противном случае Инициализация V и W имеет неопределенную последовательность.

Цитируется из N4659, форматирование настроено для работы с поддерживаемой здесь уценкой.

Точное определение динамической инициализации см. В предыдущем подразделе 6.6.2 [basic.start.static].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...