нулевая инициализация и статическая инициализация статической переменной локальной области видимости
Я прочитал несколько постов наC ++ инициализация от Google, некоторые из которых направляют меня сюда на StackOverflow. Концепции, которые я выбрал из этих постов, следующие:
порядок Инициализация C ++ - это:Нулевая инициализация;Статическая инициализация;Динамическая инициализация.Статические объекты (переменные включены) являются первымиНулевой инициализирован, а потомСтатическая инициализация.У меня есть несколько запросов относительноинициализация вопрос (класс хранения вопрос также может быть связан):
Глобальные объекты (определяется безстатический Ключевое слово) также являются статическими объектами, верно?Глобальные объекты также инициализируются какстатические объекты двумя шагами, как указано выше, верно?ЧтоСтатическая инициализация? Относится ли это к инициализации статических объектов (определяется с помощьюстатический ключевое слово)?Я также прочитал, что объекты, определенные в блоке (то есть в функции) сстатический Ключевое слово инициализируется, когда поток выполнения впервые входит в блок! Это означает, чтолокальные статические объекты не инициализируются раньшеглавный выполнение функции. Это означает, что они не инициализируются как два шага, упомянутых выше, верно?Динамическая инициализация относится к инициализации объектов, созданныхновый оператор, верно? Это может относиться к инициализации какmyClass obj = myClass(100);
или жеmyClass obj = foo();
У меня слишком много запросов на инициализацию испецификатор класса хранения проблемы. Я прочитал документ C ++ 2003 Standard, но не могу найти четкую логику, так как они разбросаны по всему документу.
Я надеюсь, что вы дадите мне ответ, которыйлогически объясняет всю карту спецификатора класса хранения и инициализации. Любая ссылка приветствуется!
Код, который может объяснить мой вопрос:
class myClass{
public:
int i;
myClass(int j = 10): j(i){}
// other declarations
};
myClass obj1;//global scope
static myClass obj2(2);//file scope
{ //local scope
myClass obj3(3);
static myClass obj4(4);
}
РЕДАКТИРОВАТЬ:
Если вы считаете, что мой вопрос довольно утомителен, вы можете объяснить свои идеи на основе приведенного выше кода.