История изменений
Исправление KennyMinigun, (текущая версия) :
Да не адрес* она возвращает! А ссылку. Вот тебе «на поразмыслить»:
struct Data { int i; } d;
// возвращаем указатель, взятие адреса происходи явно,
// с помощью оператора &
Data * getPtr() { return &d; }
// возвращаем копию обьекта
Data getCopy() { return d; }
// возвращаем ссылку, конвертация между ссылками и
// реальными обьектами (значениями) происходит неявно
Data & getRef() { return d; }
Так же на этапе обучения С++ (собственно как у тебя) можно считать, что ссылка — это просто другое имя того же обьекта (значения).
В случае возврата ссылки вызывающий решает копировать ли обьект:
Data dcopy = getRef(); // копируем
Data & dref = getRef(); // не копируем
Data * dptr = & getRef(); // не копируем
* Гусары, молчать, тут человек основ С++ не понимает.
Исходная версия KennyMinigun, :
Да не адрес* она возвращает! А ссылку. Вот тебе «на поразмыслить»:
struct Data { int i; } d;
// возвращаем указатель, взятие адреса происходи явно,
// с помощью оператора &
Data * getPtr() { return &d; }
// возвращаем копию обьекта
Data getCopy() { return d; }
// возвращаем ссылку, конвертация между ссылками и
// реальными обьектами (значениями) происходит неявно
Data & getRef() { return d; }
Так же на этапе обучения С++ (собственно как у тебя) можно считать, что ссылка — это просто другое имя того же обьекта (значения).
В случае возврата ссылки вызывающий рещает копировать ли обьект:
Data dcopy = getRef(); // копируем
Data & dref = getRef(); // не копируем
Data * dptr = & getRef(); // не копируем
* Гусары, молчать, тут человек основ С++ не понимает.