Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Зачем придумали ссылки, если уже были указатели? Они дают какое-то дополнительное удобство, или новый функционал?

Amaxar 777 Высший разум (146647), на голосовании 5 дней назад
Голосование за лучший ответ
Krab Bark Искусственный Интеллект (300435) 1 месяц назад
Дают дополнительное, и большое, удобство. Не надо брать адреса и разыменовывать указатели. Конечно, это синтаксический сахар, но весьма полезный для здоровья программиста :)
Amaxar 777Высший разум (146647) 1 месяц назад
Всего лишь ради того, чтобы не надо было разыменовывать? Серьезно?
Krab Bark Искусственный Интеллект (300435) Amaxar 777, в чистом С прекрасно обходятся без ссылок. И в C++ без них можно превосходно обходиться, лишь с большим многословием в программе и большей вероятностью неожиданно выстрелить себе в ногу.
Moon LateГуру (3808) 1 месяц назад
а еще есть левосторонние ссылки :)
Moon LateГуру (3808) 1 месяц назад
и есть правосторонние ссылки :)
int&& rref = 100;
Alexey KutuzovГуру (2850) 1 месяц назад
Мы же о С++? Наряду с просто удобством реально добавляется функционал. И чем новее стандарт, тем изощрённее их использование.

Они спасают от ошибок. Здесь понятно.

Позволяют писать нормальный код для переопределений, шаблонов и всякого прочего. Даже для простейшего случая переопределения операции нужна ссылка.

Позволяют компиляторам оптимизировать код. Например, возвращение из функции r-value нормальный компилятор сразу делает как работу с классом, принимающим значение.

Это из самых очевидных примеров. А в целом, работа над реальным проектом сразу всё расставляет по местам. И необходимость ссылок сразу становится понятной.
Amaxar 777 Высший разум (146647) У меня нет реальных проектов) По работе прогаю, но там вся эта муть мне не пригождается)
Moon Late Гуру (3808) 1 месяц назад
Ссылки - это урезанные указатели. И задуманы ссылки для дуракоустойчивости.
Указателю можно сделать плохо, переназначив или изменив его вот так:
 ptr = &a;
ptr = &b;
ptr++;
ptr += a + b * c;
А со ссылкой это уже не канает. Таким образом, ссылка - безопасна для использования.
Хотя физически ссылка - то же самое, что и указатель, физически она так же содержит адрес элемента, на который ссылается.

Ну и еще есть особый вид ссылок - правосторониие ссылки. Рассказывать не буду, это не для средних умов.
 int&& rref = 100; 
Amaxar 777Высший разум (146647) 1 месяц назад
Да лан, раз вы это знаете, то у средних умов нет с этим проблем, могли б и рассказать. Но придется идти гуглить, шо поделать, заинтересовали)
Похожие вопросы