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

С++: почему мы не можем ссылаться на ссылки или массив ссылок?

Я заметил, что ссылка на ссылку отсутствует, но есть указатель на указатель, а также нет массива ссылок, кроме массива указателей.

Может кто-нибудь дать мне какую-то причину?

4b9b3361

Ответ 1

Указатели являются изменяемыми (если не const), ссылки никогда. Таким образом, нет смысла иметь указатель или ссылку на ссылку.

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

Ответ 2

Это соответствует стандарту С++ 8.3.2/4:

Не должно быть ссылок на ссылки, нет массивов ссылок и ссылок на ссылки.

Ответ 3

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

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

Ответ 4

С++ Стандарт 8.3.2/4:

There shall be no references to references, no arrays of references, and no pointers to references.

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