Это проблема с повторной привязкой ссылки? Я искал этот вопрос в Google, но не могу найти подходящих ответов на этот вопрос. Что заставило разработчиков C ++ сделать это именно так?

c++
9
lqr 20 Ноя 2014 в 13:51

5 ответов

Лучший ответ

На большинство вопросов подобного рода отвечает Дизайн и эволюция C ++ Страуструпа. В этом случае см. Раздел §3.7 Ссылки:

В прошлом меня укусили ссылки на Algol68, где r1=r2 может либо назначить через r1 объекту, на который имеется ссылка, либо назначить новое ссылочное значение для r1 (повторное связывание r1) в зависимости от типа r2. Я хотел избежать подобных проблем в C ++.
Если вы хотите выполнять более сложные манипуляции с указателями в C ++, вы можете использовать указатели.

14
Jonathan Wakely 20 Ноя 2014 в 11:02

Бьярн Страуструп ввел в язык ссылки для поддержки ссылочных параметров («вызов по ссылке») для перегрузки оператора. Вам просто не нужно повторно связывать ссылочные параметры.

Если вам нужны «повторно связываемые ссылки», используйте указатели.

5
fredoverflow 20 Ноя 2014 в 10:57

В C ++ ссылка - это просто другое имя объекта. Это не косвенное указание; вот почему вы не можете указать на другой объект.

2
axiac 20 Ноя 2014 в 10:56

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

Во-вторых, мы не можем повторно связать ссылки в нашем C ++.

ref1 = ref2; // It's not mean "rebinding" - it just modify the object which ref1 points.

Итак, нам нужно создать новый оператор, например этот

ref1 :=: ref2;

Это было бы грязным пунктом C ++, не так ли?

0
ikh 20 Ноя 2014 в 11:00

Одна проблема - это синтаксис. Как бы написать такую ​​операцию? Вам придется создать совершенно новый оператор, чтобы устранить двусмысленность, - довольно большие вложения для того, что уже можно сделать с помощью указателей.

0
glank 20 Ноя 2014 в 11:05