迭代器解除引用问题

时间:2009-11-23 23:48:59

标签: c++ iterator

如果我有

list<NS*> v;  
typename list<NS*>::iterator it;   
for(it = v.begin();it!=v.end();++it){  
  cout<<**it.ns_member1<<endl;    // does not compile  
  NS ns = **it;  
  cout<<ns.ns_member1<<endl;      // this compiles.  
}

为什么会这样?

2 个答案:

答案 0 :(得分:3)

尝试(**it).ns_member1

否则,在尝试评估it.ns_member1后将取消引用。这就像3*(1+2) vs 3*1+2

答案 1 :(得分:3)

取消引用('*')的优先级低于'。'运营商,所以这一行:

cout<<**it.ns_member1<<endl;

像这样:

cout << (**(it.ns_member1)) <<endl; // ERROR

我建议这样做:

cout << (*it)->ns_member1 << endl;

实际上没有必要使用解除引用运算符两次,一次后跟' - &gt;'运营商将做同样的事情,应该读大多数人更清楚。

HTH。