C++ Когда именно инициализируется статика области функции? ⇐ C++
-
Anonymous
C++ Когда именно инициализируется статика области функции?
Как правило, статические переменные области функции инициализируются, когда элемент управления впервые достигает объявления переменной (например, при первом вызове функции), но при некоторых обстоятельствах они могут быть инициализированы раньше. При каких обстоятельствах мы можем гарантировать, что конструктор статической переменной области функции будет горячим вызовом до первого вызова функции?
В частности, у меня есть такой пример:
(На богомолте)
// а.ч недействительный initA(); недействительный setA (интервал val); интервал getA(); // a.cpp #include "аа" статический int а; недействительный initA() { а = 1; } void setA(int val) { а = значение; } интервал getA() { вернуть а; } // ч.ч класс Б { публика: Б(); }; // b.cpp #include "б.ч" #include "аа" Б::Б() { наборА(12); } // main.cpp #include "аа" #include "б.ч" #include недействительными local_statics(); интервал основной() { инициалА(); // устанавливает статическую область пространства имен int `a` в 1 локальная_статика(); std::cout
Как правило, статические переменные области функции инициализируются, когда элемент управления впервые достигает объявления переменной (например, при первом вызове функции), но при некоторых обстоятельствах они могут быть инициализированы раньше. При каких обстоятельствах мы можем гарантировать, что конструктор статической переменной области функции будет горячим вызовом до первого вызова функции?
В частности, у меня есть такой пример:
(На богомолте)
// а.ч недействительный initA(); недействительный setA (интервал val); интервал getA(); // a.cpp #include "аа" статический int а; недействительный initA() { а = 1; } void setA(int val) { а = значение; } интервал getA() { вернуть а; } // ч.ч класс Б { публика: Б(); }; // b.cpp #include "б.ч" #include "аа" Б::Б() { наборА(12); } // main.cpp #include "аа" #include "б.ч" #include недействительными local_statics(); интервал основной() { инициалА(); // устанавливает статическую область пространства имен int `a` в 1 локальная_статика(); std::cout
Мобильная версия