Можете ли вы рассказать мне, почему вывод этого ссылочного члена класса отличается от разных компиляторов?
Инициализация списка членов класса
class B
{
int& aRef;
public:
B(int c):aRef(c){}
void Print()
{
cout<<aRef<<endl;
}
};
void f(int s)
{
int& lcRef=s;
cout<<lcRef<<endl;
}
int main()
{
int x=100;
B s(x);
s.Print(); //ms c++ output : 3323244, gcc output :100
f(x); //ms c++ output : 100, gcc output:100
return 0;
}
И второй параметр вопрос функции f(int s)
ведет себя такую же логику, что застройщик в инициализации класса Б?
Вы сохраняете ссылку на временный (на 'Int c'parameter в' b' конструктора). Как только конструктор будет завершен, он больше не находится в области видимости, будет уничтожен, и тогда у вас будет свисающая ссылка. Доступ к нему после этого - ** неопределенное поведение **. – WhozCraig