int& y=100;//error
void f(int& n){}
f(10);//error
Но почему-то разрешается делать вот так
class AA
{
int& r;
public:
void print() {prn(r);}
AA(int n):r(n){};//Ok?
AA(const AA& a):r(a.r){prn(a.r);}//Ok?
AA& operator=(const AA& a)
{
if(this!=&a)
{
r=a.r;
return *this;
}
}
};
(prn - функция-шаблон, обертка для cout)
Но в результате работы возникают странные глюки.
void f()
{
AA a(90);
a.print();//выводит 90
AA a1=a;//Copy constructor
a.print();//выводит -1078159084
}
И, как ни странно, не работает и такой вроде бы "нормальный" вариант.
void f()
{
int yy=98;
AA a(yy);
a.print();//выводит 98
AA a1=a;//Copy constructor
a.print();//выводит -1078159084
}
Хотелось бы понять почему во-первых проходит такая инициализация, а во-вторых почему ссылка "портится" после присваивания или конструктора копирования.
Савсибо