LINUX.ORG.RU

История изменений

Исправление 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(); // не копируем

* Гусары, молчать, тут человек основ С++ не понимает.