Почему значение я == 0 в этом коде С++?

Я запутался в следующем коде:

#include <iostream>

int i = 1;
int main()
{
    int i = i;
    std::cout << "i: " << i << "\n";
    return 0;
}

Выход:

i: 0

Я ожидал, что запуск вышеуказанного кода приведет к печати 1. Может кто-нибудь объяснить причину этого странного поведения?

Ответы

Ответ 1

Вы инициализируете i самим. Оба i в int i = i; являются внутренними, а не внешними. Это undefined поведение, и вы можете получить 0 или что-либо.

Это правильный путь, если вы хотите назначить внешний i внутреннему i.

#include <iostream>

int i = 1;
int main()
{
    int i = ::i;
    std::cout << "i: " << i << "\n";
    return 0;
}

Live Demo


Кстати, вы должны внимательно прочитать все предупреждения компилятора. Если вы это сделали, вы можете сами увидеть проблему:

Предупреждение 'i' используется неинициализированным в этой функции