Почему нельзя создать массив ссылок в c ++? - PullRequest
28 голосов
/ 28 марта 2011

C ++ Стандарт 8.3.2 / 4 гласит:

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

НоЯ не могу понять, почему это ограничение добавлено в C ++.На мой взгляд, код ниже можно легко скомпилировать и работать?Какова реальная причина этого ограничения?

int a = 10, b = 20;
int &c[] = {a, b};

Ответы [ 4 ]

27 голосов
/ 28 марта 2011

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

5 голосов
/ 28 марта 2011

Ссылка не может быть переназначена и не имеет размера.

Если бы массивы ссылок были разрешены, они, следовательно, должны обрабатываться особым образом.

5 голосов
/ 28 марта 2011

Потому что ссылки не являются объектами. Ссылки были в основном введены для поддержки вызова по ссылке и возврата по ссылке без вставки & на сайте вызова. То, что вы, вероятно, хотите, это массив указателей.

1 голос
/ 28 марта 2011

Вот что я прочитал по адресу:

5.2.1 Подписка [expr.sub]

1 Постфиксное выражение, за которым следует квадратное выражениескобки - это постфиксное выражение.Одно из выражений должно иметь тип «указатель на T», а другое должно иметь перечисление или целочисленный тип.Результатом является lvalue типа «T». Тип «T» должен быть полностью определенным типом объекта.61) Выражение E1 [E2] идентично (по определению) * ((E1) + (E2))[Примечание: см. 5.3 и 5.7 для деталей * и + и 8.3.4 для деталей массивов.- конец примечания]

-C ++ Draft.

int a = 10, b = 20;
int &c[] = {a, b};

Итак, представьте, что &c[0] будет чем-то как *&(c+0), ссылки IMHO похожи на псевдонимы,Следовательно, исходя из понятия «массивы», он будет пытаться разыменовать значение, содержащееся в ссылке, которая не нужна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...