Подтвердить что ты не робот

Почему указатели на ссылку незаконны в С++?

Как упоминается сам заголовок - Почему указатель на ссылку является незаконным, а наоборот является законным в С++?

Спасибо.

4b9b3361

Ответ 1

Указатель должен указывать на объект. Ссылка не является объектом.

Если у вас есть ссылка r, как только она будет инициализирована, каждый раз, когда вы используете r, вы фактически используете объект, к которому относится ссылка.

Из-за этого вы не можете взять адрес ссылки, чтобы иметь возможность получить указатель на нее в первую очередь. Рассмотрим следующий код:

int x;
int& rx = x;

int* px = ℞

В последней строке &rx берет адрес объекта, на который ссылается rx, поэтому он точно такой же, как если бы вы сказали &x.

Ответ 2

Концепция высокого уровня, которая ссылается на реализацию, - это просто другое имя для существующего объекта. У вас может быть указатель на объект (или функцию), но вы не можете иметь указатель на имя объекта. По этой причине идея указателя на ссылку не имеет смысла. Другими словами, ссылки несущественны, в общем случае они просто не существуют в памяти. Они не существуют как нечто, на что можно обратить внимание.

Верно, что во многих случаях на практике ссылки занимают память (и реализуются как скрытые указатели). Но это только деталь реализации, характерная для некоторых конкретных контекстов. В общем случае ссылки не занимают памяти, , как явно указано в спецификации языка, которая сразу же следует из спецификации языка.

Ответ 3

В чем разница между указателем на ссылку (объекту) и указателем на фактический объект? Ссылка не может быть изменена для ссылки на другой объект. Просто используйте обычный указатель на объект, о котором идет речь.

С другой стороны, ссылка на указатель, как и любая другая ссылка, дает вам модифицируемый дескриптор определенной переменной. В этом случае это указатель.

Ответ 4

Поскольку ссылка не на что-то, на что можно обратить внимание, это, в свою очередь, потому, что на самом деле ее не нужно представлять где-либо в памяти. Существуют ссылки на альтернативные имена уже существующим вещам. Вы можете получить указатель на переименованную вещь, но это указатель на значение, а не указатель на ссылку.