Распечатка неинициализированной переменной-члена. С и без конструктора по умолчанию

Итак, у меня есть следующий код:

#include<iostream>
using namespace std;

class baseClass
{
public:
    int objID;

    /*baseClass()
    {}
    */
};


int main(int argc, char** argv)
{
    baseClass bcObj;
    cout << "bcObj.objID: " << bcObj.objID << endl;
    return 0;
}

Теперь, если я пытаюсь запустить это, я получаю ошибку во время выполнения об использовании неинициализированной переменной. Но если я добавлю конструктор по умолчанию (раскомментируем конструктор), он будет работать нормально. Он по-прежнему печатает мусорное значение, но печатает без ошибок во время выполнения.

Почему эта разница? Конструктор по умолчанию ничего не делает с objID. Я использую Visual Studio 2013 (языковые расширения отключены).

Спасибо.

1 ответ

Это неопределенное поведение в обоих случаях. Ваш компилятор достаточно умен, чтобы обнаружить один из двух случаев.

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