C++ объявляя несколько целых чисел, печатает разные значения

Я пытаюсь выучить C++, и я столкнулся с очень досадным несоответствием:

#include <iostream>
using namespace std;

int main (){
    int var1,var2,var3,var4,var5,var6,var7;

    cout << var1 << endl;
    cout << var2 << endl;
    cout << var3 << endl;
    cout << var4 << endl;
    cout << var5 << endl;
    cout << var6 << endl;
    cout << var7 << endl;

    return 0;
}

Возвращает следующее:

0
4196128
0
570985680
32767
0
0

Почему я получаю разные значения для этих неустановленных значений? Разве я не должен получить 0 для каждой переменной? Что представляет собой вывод, который я получаю?

2 ответа

Решение

Неинициализированные локальные переменные будут иметь неопределенные значения, которые будут казаться случайными. Чтение их неопределенного значения приводит к неопределенному поведению.

Чтение из неинициализированного int является неопределенным поведением. Вывод, который вы видите, может быть данными, которые в настоящее время хранятся в ячейках памяти, зарезервированных для ваших переменных.

Но это не важно, потому что все может случиться; важно предотвратить неопределенное поведение, и это лучше всего сделать здесь, инициализируя ваши переменные:

int var1 = 0;
int var2 = 0;
// and so on

Также обратите внимание, что ваш компилятор может предупредить вас об этом, если вы используете соответствующий уровень предупреждения. Посмотрите это в документации вашего компилятора и привыкните не игнорировать никаких предупреждений.

Другие вопросы по тегам