Мой вопрос касается следующего кода:
#include <stdio.h>
#include <iostream>
#include <string>
using namespace std;
class Blob {
public:
int age;
void hello() { printf("hello\n"); }
};
void test_case() {
Blob a;
//a.hello(); //(1)
cout << a.age << endl;
}
int main() {
test_case();
return 0;
}
, если я закомментирую (1), он скомпилируется успешно. Если раскомментировать out (1), возникает ошибка компиляции, например, в VS2017 он жалуется на «использование не инициализированной локальной переменной« a »».
Я некоторое время искал в поисковой системе и теперь знаю только следующие 4 случаи, когда компилятор автоматически помогает мне определить конструктор по умолчанию:
член класса является экземпляром класса (скажем, B), а класс B определил конструктор по умолчанию
класс является производным от другого класса (скажем, B), и B определил конструктор по умолчанию
класс имеет виртуальную функцию
любая комбинация предыдущих 3 случаев.
Мне любопытно, что, если я закомментирую (1), компилятор добавит определение конструктора для класса Blob