Тип возврата двунаправленного итератора

Во время тестирования в университете я столкнулся с этим вопросом относительно списков в STL, C ++ версии 98:

Учитывая эти строки: list<A*> l; l.push_back(new A); что
возвращаемый тип звонка **(l.begin())?

Среди доступных ответов был A а также A& (остальные не имеют отношения).

Я предполагал, что это будет , но профессор заявил, что это &.

Я узнал, что разыменование итератора возвращает ссылку на элемент списка, поэтому *(l.begin()) должен вернуть объект, тип которого (A*)&,
Тогда еще раз **(l.begin()) должен «проходить через» ссылка, заданная контейнером списка и даже через указатель на A и в конечном итоге вернуть объект A тип.

Какова правильная интерпретация? Пожалуйста, предоставьте объяснение.

0

Решение

Если p имеет тип A*, затем *p имеет тип A&,

Если p имеет тип A*& (ссылка на указатель), затем *p также имеет тип A&,

Если x имеет type list<T>::iterator, затем *x имеет тип T&, и если T==A*, затем **x имеет тип A&,

2

Другие решения

В раздел 5.3.1 ты можешь найти

Одинарный * Оператор выполняет косвенное выражение: выражение, к которому он
применяется указатель на тип объекта или указатель на
тип функции и результат именующий ссылаясь на объект или
функция, на которую указывает выражение. Если тип выражения
это «указатель на TТип результата «T«.

0

По вопросам рекламы [email protected]