双取消引用迭代器的返回类型
Return type of a bi-dereferenced iterator
在大学的一次测试中,我遇到了关于STL C++版本98中的列表的问题:
给定这些行:
list<A*> l; l.push_back(new A);
什么是 调用**(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&
类型。
在第 5.3.1 节中,您可以找到
一元
*
运算符执行间接寻址:它所指向的表达式 应用应为指向对象类型的指针,或指向 函数类型,结果是引用对象的左值或 表达式指向的函数。如果表达式的类型 是"指向T
的指针",结果的类型是"T
"。
相关文章:
- 为什么 C++ std::unordered_map 从 emplace/ 找到返回一个迭代器?
- 为什么这个程序没有打印返回的迭代器的正确第二个元素?
- 由 std::find() 返回的迭代器不可取消引用
- 返回的迭代器
- 何时返回矢量迭代器而不是矢量?
- 由set2.begin()返回的迭代器类型
- 对矢量<类型*>迭代器感到困惑
- C++异构类型迭代器的迭代器
- 如何在C++中正确递增返回的迭代器
- 从end()函数返回的迭代器中获取BST的最后一个节点
- 找到一个位置并返回一个迭代器不起作用
- 返回 C++ 迭代器
- C++函数从列表中查找最小值.此函数是否正确,因为返回的迭代器失效
- 从 std::unique 返回的迭代器的用法
- 从std::find_if等方法返回的迭代器与常规迭代器不匹配
- 为什么stl_tree.h中的end()返回对迭代器对象的引用,而begin()返回object ?
- 为什么c++标准需要std::分区来满足不同类型迭代器的不同复杂性
- 对于哪个标准容器(如果有的话),end()返回的迭代器是持久化的
- 如何简化检查搜索算法返回的迭代器是否有效
- 尝试使用从 ptr_map::find 返回的迭代器时出错