Hatred's Log Place

DON'T PANIC!

Dec 10, 2022 - 1 minute read - programming

C++ прекрасен, как всегда

Жжот дурилко. Все помним про вызов функции vs конструирование объекта:

struct foo { foo(int) {} };
int main() {
    foo(3); // временный объект
}

vs

void foo(int){}
int main() {
    foo(3); // вызов функции
}

Теперь такое:

struct foo {
    foo() = default;
    foo(int v) : x(v) {}
    int x = 1;
    static int s;
};
int foo::s; // где храним
int main() {
    foo(s);
}

Да, код в main эквивалентен:

int main() {
    foo s;
}

дефолтное конструирование объекта s

Обновляем компилятор в мозгах :)