Во время испытания в университете я столкнулся этот вопрос относительно списков в STL, C++ версии 98:
Возвращение типа би-разыменованных итератора
Учитывая эти строки:
list<A*> l; l.push_back(new A);
Какой тип возвращения из позвонить**(l.begin())
?
Среди возможных ответов было A
и A&
(другие не актуальны).
Я предположил, что это будет , но профессор сказал, что это &.
Я узнал, что разыменование итератора возвращает ссылку на элемент списка, поэтому *(l.begin())
должен вернуть объект, тип которого равен (A*)&
.
Тогда другое разыменование, такое как **(l.begin())
должно «пройти» ссылку, указанную контейнером списка, и даже через указатель на A и в конечном итоге вернуть объект типа A
.
Какая правильная интерпретация? Просьба дать пояснения.
'A' очень отличается от' A & ', там нет места для интерпретации и вы могли бы просто попробуйте его – user463035818
@ tobi303 Я знаю разницу между переменной и ссылкой на переменную. Пожалуйста, прочитайте мой вопрос еще раз. В любом случае, спасибо. –