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

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

#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 (языковые расширения отключены).

Спасибо.

0

Решение

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

0

Другие решения


По вопросам рекламы [email protected]