首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(*iter)->method()和(*iter).method()之间有什么区别?

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

Stack Overflow用户
提问于 2014-03-18 20:49:58
回答 3查看 219关注 0票数 1
代码语言:javascript
复制
vector<Object*>::iterator iter;

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

我知道(iter)->methodA();等价于((*iter)).methodA();

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-18 20:52:55

(*iter)获取迭代器的内容。由于vector<Object*>的内容本身就是指针,所以需要->来获取methodA

票数 3
EN

Stack Overflow用户

发布于 2014-03-18 20:51:25

*iter给了你一个Object*。这是一个指针,因此您需要使用->或进一步的*来通过它调用方法。它和

代码语言:javascript
复制
Object* p = *iter;
p->methodA();
(*p).methodA();

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

票数 3
EN

Stack Overflow用户

发布于 2014-03-18 21:00:19

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

爱尔兰人

对于类型为Iterator的It,除了其他要求外,对于此类类型的对象i,必须满足以下条件:

代码语言:javascript
复制
Expression  Return    Precondition
*i        reference   i is dereferenceable [2]
++i           It&   

所以假设迭代器

代码语言:javascript
复制
vector<Object*>::iterator iter;

然后:

代码语言:javascript
复制
   (*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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22490736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档