(* iter) - > method()和(* iter).method()之间的区别是什么?

时间:2014-03-18 20:49:59

标签: c++ pointers

vector<Object*>::iterator iter;

for(iter = vec.begin(); iter != vec.end(); ++iter)
{
    (*iter)->methodA(); 
}

我知道( iter) - &gt; methodA();相当于((* iter))。methodA();

但我不明白为什么我们需要第二个*。不应该指向iter的值(指针值或Object实例的地址),它是一个地址(iter指向自身的地址)。指针非常混乱。

2 个答案:

答案 0 :(得分:3)

*iter为您提供了Object*。这是一个指针,因此您需要使用->或更多*来通过它调用方法。它与

相同
Object* p = *iter;
p->methodA();
(*p).methodA();

至于你的问题标题,(*iter).methodA()不应该编译。

答案 1 :(得分:1)

迭代器是一种抽象。这是一个概念,任何行为类似于迭代器的都是迭代器。这就是为什么你可以在这里声明指针是一个迭代器

Iterator

对于 It 类型作为迭代器,除了其他要求之外,还必须满足以下类型的对象 i

Expression  Return    Precondition
*i        reference   i is dereferenceable [2]
++i           It&   

所以假设迭代器

vector<Object*>::iterator iter;

然后:

   (*iter) -> methodA();
   ^^^^^^^  ^       
&(Object*)  dereference pointer and call methodA on the object
                                         pointed to by pointer

   (*iter) . methodA();
   ^^^^^^^  ^       
&(Object*)  call methodA on the pointer? error: request for member ‘methodA’ in 
           ‘it.__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* 
           [with _Iterator = Object**, _Container = std::vector<Object*, 
           std::allocator<Object*> >]()’, which is of non-class type ‘Object*’
           make: *** [main.o] Error 1