Тоже самое что указатель, но с более упрощенным синтаксисом использования(упрощение происходит за счет того, что компилятор сам выполняет часть работы по разыменовыванию ссылки, то есть для программиста все происходит совершенно прозрачно, ему кажется, что ссылка это просто второй идентификатор объекта).
Ну впринципе это не существующая на самом деле вещь. Была придумана чтобы не работать с указателями. Указателю можно приравнять NULL или любое другое значение, а это опасно. Со ссылками такого нельзя, компилятор не даст. Вот IMHO и вся прелесть этого. В функцию лучше передавать ссылку, так как компилятор в этом случае поможет найти ошибку.
а почему тогда ссылка очень похожа на указатель и при этом называется альтернативным именем объекта? Если функция возвращает ссылку на объект, то что на самом деле возвращается?
Как почему. Asvald же обяснил, что это указатель работа с которым при помощи компилятора происходит как с объектом. Есть адрес и содержимое памяти по этому адресу. Как ты думаешь что возвратиться?
Nouzui Круто. Объект NULL. Даже С++ с его более жёсткой проверкой типов, прикалывает. Интересно это все компиляторы поддерживают?
Booster Чего же это С++ прикалывает? Если тут сознательно происходит приведение типа. По этому поводу Эккель писал: "Язык C++ помогает предотвращать ошибки, но не защитит вас от самого себя, если вы сознательно хотите разрушить механизмы безопасности."
Asvald Да, но ссылки IMHO и задумывлись как более безопасная альтернатива указателям, а тут такое. Хотя конечно фраза Эккеля очень верна, и ссылки лишь помогают, но не защищают на 100%.
Booster Комрад Страуструп решил ввести ссылки в первую очередь для того, чтобы можно было красиво перегружать операторы.
ну можно напороться и менее экзотическим способом, я например грешу так: Код (Text): some_constructor(const some_object& obj = some_object()){ } даже если obj должен быть взаправду настоящим, а не чем-то раз и навсегда определенным, вроде allocator. имхо, риференс лучше пойнтера, кроме следующих случаев (первые что вспомнились): 1) указатели на функции ( даже не знаю можно ли чем заменить?) 2) внутренности классов, где можно позволить себе сишный стиль. Кто против реализаций stl-ских контейнеров с node*, но где-то глубоко внутри - ведь все равно наружу торчит только изящный итератор? 3) еще случай. Вам нужна небольшая структура, по сути дела aggregate type. Если в ней будет риференс вместо указателя, то придется писать копи-констр. и присваивание. Есть ли замена указателямм в этой ситуации? 4) экономия параметров если пойнтер NULL то можно проигнорировать. Истинно плюсовый стиль наверное предполагает какое-либо иное решение.