在大学的一次考试中,我遇到了这个关于 C++ 版本 98 中的列表的问题:
Given these lines:
list<A*> l; l.push_back(new A);
what is the return type of the call**(l.begin())
?
在可用的答案中有 A
和 A&
(其他不相关)。
我以为它是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/