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

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

Кто-либо мог привести мне какую-либо причину?

11
задан Gordon Gustafson 23 February 2010 в 20:58
поделиться

4 ответа

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

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

15
ответ дан 3 December 2019 в 01:24
поделиться

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

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

10
ответ дан 3 December 2019 в 01:24
поделиться

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

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

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

4
ответ дан 3 December 2019 в 01:24
поделиться

Все, что вам нужно сделать, это задать URL-адрес «root» для представления домашней страницы. Поскольку просмотр домашней страницы уже ограничен для пользователей, вошедших в систему, он автоматически перенаправит анонимных пользователей на страницу входа.

Создать URL-адрес таким, какой он есть. И добавить что-то вроде:

(r'^$', 'my_project.my_app.views.homepage'),
-121--957414-

Без построения нового, возможно большого списка с повторяющимися значениями:

def select_weighted(d):
   offset = random.randint(0, sum(d.itervalues())-1)
   for k, v in d.iteritems():
      if offset < v:
         return k
      offset -= v
-121--1857439-

Он соответствует стандарту C++ 8,3,2/4:

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

12
ответ дан 3 December 2019 в 01:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: