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

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

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

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

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

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

Ответ 1

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

Ответ 2

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

Ответ 3

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

Если бы массивы ссылок были разрешены, их поэтому пришлось бы обрабатывать особым образом.

Ответ 4

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

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

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

-С++ Draft.

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

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