Может ли кто-нибудь объяснить мне разницу между этими двумя функциями?
Первый пример может привести к неопределенному поведению, поскольку возвращаемая ссылка «указывает» на переменную, которая в конце функции уничтожается. Это очень похоже (почти идентично) определению dangling pointer.
Второй случай - это нормальный «правильный» способ возврата переменной в указанном выше примере.
и скажите мне, что цель, когда мы используем «&» оператор после возвращения типа функции?
Назначение &
после того, как тип в операторе return возвращает ссылку на этот тип.
Когда мы должны использовать его, потому что я редко видел его раньше.
Как правило, передача ссылки или возврат ссылки полезна, чтобы избежать копирования или возврата параметра, который может быть дорогостоящим.
С C++ 11 есть лучший способ обработки возвращающихся больших объектов: move semantics.
В других случаях он используется для обеспечения доступа к внутренним членам класса. Это пример std::string::operator[]
, например:
char& operator[] (size_t pos);
const char& operator[] (size_t pos) const;
Он также может быть использован, чтобы цепи вызова функции. Это относится к:
std::cout << 'H' << 'e' << 'l' << 'l' << 'o';
например. В приведенном выше коде std::ostream::operator<<
возвращает ссылку на себя.
Обычно вы не хотите использовать его в качестве типа возврата для точной причины, отображаемой здесь. – chris
http://stackoverflow.com/a/2273821/78845 – Johnsyweb
Это не «оператор». Это просто символ '&', который является тем же символом, который используется в некоторых операторах. – AnT