c++ - 双向解引用迭代器的返回类型

标签 c++ stl c++98 listiterator

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

Given these lines: list<A*> l; l.push_back(new A); what is the return type of the call **(l.begin())?

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

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

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

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

最佳答案

如果p类型为 A* , 然后 *p类型为 A& .

如果p类型为 A*& (引用指针),然后是 *p也是类型 A& .

如果x属于 type list<T>::iterator , 然后 *x类型为 T& , 如果 T==A* , 然后 **x类型为 A& .

关于c++ - 双向解引用迭代器的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34882107/

相关文章:

c++ - std::array 聚合初始化和模板整数类型

c++ - 替换 C++ 98 中的模式

c# - 我有 .H 文件,如何将其公共(public)方法打开到 .Net 库?

c++ - 使用具有相同声明的类方法调用全局函数

c++ - 如何授予对私有(private)方法的访问权限

c++ - 如何在 C++ 中声明原子 vector

c++ - 如何为 C++ 程序定义 MSYS Makefile 的路径?

STL - std::vector::data() 的状态是什么?

multithreading - C++ 98 和线程

c++ - 无法编译 C++ file.cpp。 C++98模式