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]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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