Как получить ссылку на многомерный указатель? - PullRequest
0 голосов
/ 09 мая 2018

Это просто любопытный вопрос. Простите, если это звучит глупо.

Согласно dcl.ref / 5 :

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

Я не вижу в стандарте, который ограничивает ссылку указателем на кД.

Таким образом, теоретически, поскольку указатель является допустимым объектом, переменная может быть ссылкой на указатель в kD.

Однако я не могу доказать это в этом примере, имеющем ссылку на 3D-указатель.

int p = 1, *p1 = &p, **p2 = &p1, ***p3 = &p2;
int &r = p3;

Я получаю ошибку:

ошибка: неправильное преобразование из int *** в int [-fpermissive]
int & r = p3; // ошибка

или другие варианты, такие как int &&&r = p3.

ошибка: невозможно объявить ссылку на int &&, которая не является typedef или аргумент типа шаблона

Вопрос (ы)

  1. Как получить ссылку на кД (например, 3D) указатель? (если возможно)
    если нет: есть ли часть стандарта, которая ограничивает такое?

Ненужный вопрос:
Почему int&&& будет иметь ошибку "not typedef ...", в то время как int&& допустим? есть ли ограничение на '&'?

1 Ответ

0 голосов
/ 09 мая 2018

Как получить ссылку на кД (например, 3D) указатель? (если возможно)

Как отметил @Henri Menke,

Определение ссылки на указатель 3 D:

int ***(&r) = p3;

В более общем смысле объявление ссылки на указатель k -D зависит от числа * в объявителе.

int ****&r = p4; // p4 is a 4-D pointer

чтение справа налево, начиная с r, будет:

ссылка до a 4 (номер звездочки) -D указатель типа int.

Почему int &&& будет иметь ошибку "not typedef ...", пока int && допустимо? есть ли предел для & &

Как заметил @Some программист чувак:

синтаксис с && специально для значений rvalue .

...