По определению языка, учитывая, что t
является указателем, то выражение t[*t]
полностью эквивалентно выражению *(t + *t)
.
Чтобы проанализировать тип этого выражения, давайте рассмотрим его шаг для шага, изнутри. Я заменю каждое выражение целого типа, было идентифицировано «type»
.
С t
имеет тип int*
, у нас есть *(«int*» + *«int*»)
.
Вывод данных на номер int*
дает значение l. Поэтому получаем *(«int*» + «int»)
.
Теперь добавление целого числа в указатель дает, опять же, указатель того же типа, поэтому выражение сводится к *«int*»
.
Но это опять же разыменование указателя на int
, и поэтому конечный тип выражения равен lvalue int
.
Это также совершенно нечитаемым. Просто говорю. (Не ваш код, 't [* t]'). – keyser
@keyser: Если это нечитаемо ('t [* t]'), дождитесь, пока вы перейдете к простейшим шаблонам или почти ни о чем другом. – Deduplicator
Спасибо вам за ваш ответ! но как вы получаете int & from int? Потому что, хотя тип был Int? – John