Инициализация зависит от типа статической переменной.
С основными типами и начальных значениями, которые могут быть вычислены во время компиляции, переменные начальное значение должно быть лег в секции исполняемого файла, который отображается в память с копией по семантике записи.
Однако компилятор также может инициализировать переменные static
во время выполнения, как правило, до выполнения main()
. Но afaik, единственное ограничение состоит в том, что инициализация завершается, когда переменная используется вначале, и что статические переменные внутри единицы компиляции инициализируются в том порядке, в котором они записаны (в случае, если их инициализаторы зависят друг от друга).
Дело в том, что static
переменные инициализируются прежде, чем они используются в коде, вызываемом из main()
, но не указано, когда эта инициализация происходит. Компилятор может делать то, что он считает наиболее эффективным.
В любом случае, статические переменные живут как минимум до main()
выходов или exit()
. Я уверен, что C++ также вызовет деструкторы перед завершением процесса, но я об этом не знаю.
Один вопрос на вопрос, пожалуйста. И оба, вероятно, были заданы раньше, так что некоторые поиски! –
«Внутренние переменные или внешние». Я немного не понимаю, что вы имеете в виду. Внутренний/внешний по отношению к чему? Единицы компиляции, классы, ... ?? –
@ πάνταῥεῖ Обновлено. – herohuyongtao