2009-11-23 59 views
2

,如果我有迭代器解引用问题

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. 
} 

为什么会这样?

回答

3

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

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

作品出来是这样的:

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

我建议做这样的:

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

实在是没有必要使用引用操作两次,其次是' - >'操作员会做同样的事情,应该对大多数人更清楚。

HTH。

3

尝试(**it).ns_member1

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