stati c инициализация объекта каждый раз, когда вызывается функция - PullRequest
0 голосов
/ 02 апреля 2020

В моем коде есть довольно тяжелый объект, который имеет статус c. Мне было интересно, если вы переместите инициализацию переменных-членов за пределы конструктора, будут ли они выполняться каждый раз или только один раз?

struct test
{
    int a;
    int b;
};
void foo() {

    static test T;
    T.a=123;
    T.b=341;

}

int main()
{
    foo();
    foo();
    foo();
}

Будет ли

T.a=123;
T.b=341;

выполняться каждый раз, когда foo () называется?

1 Ответ

1 голос
/ 02 апреля 2020

это не инициализация, это назначения, и да, это будет. Только создание объекта (включая инициализацию) происходит один раз.

static test T = {123,341}; //happens only once.

или любая другая соответствующая инициализация, если все назначения или инициализации выполняются в теле конструктора.

...