Я хочу сделать что-то вроде
int &a = *(new int[10]);
// access all the indices from this reference somehow.
Все, что я могу сделать, это что-то вроде:
int *b = &a;
b[1] = 10;
Могу ли я сделать это, используя ссылку? Если нет, то почему?
Вы должны использовать указатели, потому что оператор индекса массива в C++ определен только для указателей (и определенных пользователем классов, которые перегружали этот оператор). Однако указатель может быть просто временным:
(&a)[1] = 10;
Если вы хотите избежать указателей, вы можете просто использовать std::array
или std::vector
:
std::array<int, 10> a;
a[1] = 10;
std::vector<int> v(n);
v[1] = 10;
Вы можете использовать ссылку:
int (&a)[10] = (int (&)[10])*new int[10];
Тем не менее, вам все равно нужно удалить [] & a, и если вы знаете размер массива, и это не очень удобно, вы можете просто создать обычный массив на основе стека. Вы не можете создать ссылку на массив неизвестной/заданной длины. Учитывая, что вы также можете указывать указатели, это чрезвычайно ограниченное практическое применение (в основном для передачи массива шаблонам, которые сами связывают ссылки с ним, как правило, так что они могут неявно получить доступ к размеру массива).
Да, вы можете это сделать, но это идет вразрез с зерном: ссылки не предполагается использовать для получения других элементов массива, кроме ссылочного элемента. Пожалуйста, воздержитесь.