双取消引用迭代器的返回类型

Return type of a bi-dereferenced iterator

本文关键字:返回类型 迭代器 引用 取消      更新时间:2023-10-16

在大学的一次测试中,我遇到了关于STL C++版本98中的列表的问题:

给定这些行:list<A*> l; l.push_back(new A);什么是 调用**(l.begin())的返回类型 ?

在可用的答案中,有AA&(其他不相关)。

我以为是A,但教授说是A&

我了解到迭代器的取消引用会返回对列表元素的引用,因此*(l.begin())应该返回类型为 (A*)& 的对象。
然后另一个像**(l.begin())这样的取消引用应该"遍历"列表容器给出的引用,甚至通过指向 A 的指针,并最终返回A类型的对象。

正确的解释是什么?请提供解释。

如果p是类型A*,则*p是类型A&

如果 p 的类型为 A*&(引用指针),则 *p 也是 A& 的类型。

如果xtype list<T>::iterator,则*xT&类型,如果T==A*,则**xA&类型。

在第 5.3.1 节中,您可以找到

一元*运算符执行间接寻址:它所指向的表达式 应用应为指向对象类型的指针,或指向 函数类型,结果是引用对象的左值或 表达式指向的函数。如果表达式的类型 是"指向T的指针",结果的类型是"T"。