Почему массивы ссылок недопустимы?

Установите все Android SDK Build-tools и удалите import android.R из вашего класса Activity. После нажмите Project -> Очистить

import android.R;

enter image description here

135
задан Jeffrey Bosboom 21 August 2016 в 21:32
поделиться

6 ответов

Отвечая на ваш вопрос о стандарте, могу процитировать Стандарт C ++ §8.3.2 / 4 :

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

138
ответ дан 23 November 2019 в 23:44
поделиться

Рассмотрим массив указателей. Указатель - это действительно адрес; поэтому, когда вы инициализируете массив, вы аналогичным образом говорите компьютеру: «выделить этот блок памяти для хранения этих X-чисел (которые являются адресами других элементов)». Затем, если вы измените один из указателей, вы просто измените то, на что он указывает; это все еще числовой адрес, который сам находится на том же месте.

Ссылка аналогична псевдониму. Если бы вы объявили массив ссылок, вы бы в основном сказали компьютеру: "

0
ответ дан 23 November 2019 в 23:44
поделиться

Ссылочный объект не имеет размера. Если вы напишете sizeof (referenceVariable) , это даст вам размер объекта, на который ссылается referenceVariable , а не размер самой ссылки. У него нет собственного размера, поэтому компилятор не может вычислить, какой размер потребуется массиву.

2
ответ дан 23 November 2019 в 23:44
поделиться

Потому что, как многие здесь сказали, ссылки не являются объектами. они просто псевдонимы. Правда, некоторые компиляторы могут реализовать их как указатели, но в стандарте это не предписывается. А поскольку ссылки не являются объектами, вы не можете на них указывать. Хранение элементов в массиве означает, что существует какой-то индексный адрес (т. Е. Указывающий на элементы по определенному индексу); и вот почему у вас не может быть массивов ссылок, потому что вы не можете указывать на них.

Используйте вместо этого boost :: reference_wrapper или boost :: tuple; или просто указатели.

10
ответ дан 23 November 2019 в 23:44
поделиться

Массив неявно конвертируется в указатель, а указатель на ссылку недопустим в C ++

12
ответ дан 23 November 2019 в 23:44
поделиться

Ссылки не являются объектами. У них нет собственного хранилища, они просто ссылаются на существующие объекты. По этой причине не имеет смысла иметь массивы ссылок.

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

Edit: Как отмечает jia3ep, в стандартном разделе объявлений есть явный запрет на массивы ссылок.

61
ответ дан 23 November 2019 в 23:44
поделиться
Другие вопросы по тегам:

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