Подскажите, пожалуйста, когда для статичного объекта в C++
вызывается конструктор?
static A a;
void func()
{
static B b;
// ...
}
Я предполагаю, что для локального объекта b
конструктор будет вызываться при первом обращении к такому объекту.
Так же я предполагаю, что для глобального объекта a
конструктор будет вызван в неопределенном порядке при запуске программы.
Верно ли мое представление?
Для локального статического объекта b
конструктор будет вызван тогда, когда управление в первый раз пройдет по вышеприведенному объявлению.
Для статического объекта a
, определенного на уровне пространства имен, конструктор будет вызван не позже, чем произойдет первое обращение к какому-то объекту или функции, определенным в этой же единице трансляции. Такие объекты инициализируются в порядке сверху-вниз, как они определены в данной единице трансляции. Таким образом, порядок инициализации разных единиц трансляции не специфицируется, а вот порядок инициализации таких объектов внутри каждой единицы трансляции задан однозначно.
Можете проверить сами. Достаточно написать программу типа такой:
struct A {
A(int n = 0) {
std::cout << "a";
if (n)
std::cout << n;
std::cout << std::endl;
}
};
A a;
void func()
{
A a2(2);
const static A a3(3);
static A a1(1);
// ...
}
A a11(11);
void func10()
{
static A a10(10);
A a20(20);
const static A a30(30);
}
int main() {
func();
func10();
return 0;
}
Становится ясным, что первыми создаются глобальные обьекты, а другие(независимо от того статические или нет) создаются по той схеме, по какой они обьявлены.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Метод next () - возвращает указатель/итератор на следующий за каким-л элементомКак называется обратный метод? В голову пришёл back, но как вижу,...
Очень много времени трачу на этот код, пытаюсь найти ошибку, но не получаетсяЗдесь есть функция, которая считывает модель из файла