返回bi-dereferenced迭代器的类型

时间:2016-01-19 16:35:10

标签: c++ stl c++98 listiterator

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

  

鉴于以下几行:list<A*> l; l.push_back(new A);是什么   返回呼叫**(l.begin())的类型?

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

我认为它是 A ,但教授说它是 A&amp;

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

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

2 个答案:

答案 0 :(得分:2)

如果p的类型为A*,则*p的类型为A&

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

如果x属于type list<T>::iterator,则*x的类型为T&,如果T==A*,则**x的类型为A& {1}}。

答案 1 :(得分:0)

section 5.3.1中,您可以找到

  

一元#! /usr/bin/perl use warnings; use strict; my $string = 'in.a+in.b=in.c'; my ($lhs, $rhs) = split /=/, $string; my @left = $lhs =~ /\.(\w+)/g; my @right = $rhs =~ /\.(\w+)/g; print "Left: @left.\nRight: @right.\n"; 运算符执行间接:它所表达的表达式   应用应该是指向对象类型的指针,或指向a的指针   函数类型,结果是左值引用对象或   表达式指向的函数。如果是表达式的类型   是“指向*的指针”,结果的类型为“T。”