Я изучаю C ++ primer 5th и знаю, что инициализаторы конструктора требуются, когда класс определяет ссылочный член, иначе компилятор жаловался бы на это.
Однако я написал фабричный метод stati c, получающий класс с пустым оператором.
#include <iostream>
using namespace std;
//Learning default initializing values.
class Default {
public:
Default(int t) : r(t) {}
static Default FromDefault() {}
friend ostream& operator<<(ostream& os, const Default& d) {
os << "c " << d.c << endl
<< "a " << d.a << endl
<< "b " << d.b << endl
<< "d " << d.d << endl
<< "l " << d.l << endl;
return os;
}
private:
int& r; //a reference which require to be initialized
char c;
int a;
float b;
double d;
long l;
};
int main() {
cout << Default::FromDefault();
return 0;
}
Я думал, что код не пройдет компилятор, но он прошел. Пока я не использую член r
, ошибки не будет.
Кажется, что элемент ссылочного класса не был инициализирован, и мне просто интересно, почему компилятор не обнаружит эту ошибку!