Распечатка неинициализированной переменной-члена. С и без конструктора по умолчанию
Итак, у меня есть следующий код:
#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 ответ
Это неопределенное поведение в обоих случаях. Ваш компилятор достаточно умен, чтобы обнаружить один из двух случаев.