C++ Когда именно инициализируется статика области функции?C++

Программы на C++. Форум разработчиков
Anonymous
C++ Когда именно инициализируется статика области функции?

Сообщение Anonymous »

Как правило, статические переменные области функции инициализируются, когда элемент управления впервые достигает объявления переменной (например, при первом вызове функции), но при некоторых обстоятельствах они могут быть инициализированы раньше. При каких обстоятельствах мы можем гарантировать, что конструктор статической переменной области функции не будет вызван до первого вызова функции?
В частности, у меня есть такой пример:
(На godbolt)

Код: Выделить всё

// a.h

void initA();
void setA(int val);
int getA();

Код: Выделить всё

// a.cpp

#include "a.h"

static int a;

void initA() {
a = 1;
}

void setA(int val) {
a = val;
}

int getA() {
return a;
}

Код: Выделить всё

// b.h

class B {
public:
B();
};

Код: Выделить всё

// b.cpp

#include "b.h"
#include "a.h"

B::B() {
setA(12);
}

Код: Выделить всё

// main.cpp

#include "a.h"
#include "b.h"
#include 

void local_statics();

int main() {
initA(); // sets a static namespace-scope int `a` to 1
local_statics();

std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/77759430/c-when-exactly-are-function-scope-statics-initialized[/url]

Вернуться в «C++»