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