class A
{
int x,y;
public:
A(int a=0,int b=0)
{x=a;y=b;}
/* ... */
}
A& fctr()
{
A loc(1,2);
return loc;
}
Давайте рассмотрим эту инструкцию:
A x=fctr();
fctr()
возвращает ссылку на уничтоженный объект... ‹‹ проблема не в этом -_-
В приведенной выше инструкции и на основе ссылки, возвращаемой fctr, программа копирует уничтоженный объект loc в x.
С другой стороны, возврат по значению copy объекта loc в x !!
Единственная разница, которую я вижу, заключается в том, что при возврате по ссылке объект loc уничтожается, но при возврате по значению объект loc не уничтожается пока инструкция не будет закончено.
Поэтому возврат по значению кажется безопасным и делает то же самое, что и возврат по ссылке!!
Что я читал в книгах и что слышал от людей, так это то, что возврат по ссылке быстрее, чем возврат по значению...
Так почему же возврат по ссылке быстрее, чем возврат по значению?
... Я думаю, что я в чем-то не прав, но я не знаю, что это такое?!!!
x
равенA
; если вы измените его наA& x = fctr();
, копия не будет сделана, и вы будете ссылаться на недопустимую память. Даже сейчас ваша программа имеет неопределенное поведение, поскольку, как вы заметили, копия создается после уничтожения временного файла. Возврат по ссылке следует выполнять только в том случае, если вы знаете, что время жизни резервного хранилища больше или равно сроку службы того, что будет получать ссылку. - person Praetorian   schedule 12.08.2013a
вfctr
? - person aschepler   schedule 12.08.2013operator+
не возвращает ссылку; Я думаю, вы путаете это сoperator+=
. Например, взгляните на сигнатуры различных операторов, перегруженныхstd::complex
. . - person Praetorian   schedule 12.08.2013