【问题标题】:iterator dereferencing issue迭代器取消引用问题
【发布时间】:2009-11-23 23:48:58
【问题描述】:

如果我有

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

为什么会这样?

【问题讨论】:

    标签: c++ iterator


    【解决方案1】:

    取消引用(“*”)的优先级低于“.”运算符,所以这一行:

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

    效果如下:

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

    我建议这样做:

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

    实际上没有必要使用两次解引用运算符,一次后跟'->' 运算符将做同样的事情,并且对大多数人来说应该更清楚。

    HTH。

    【讨论】:

      【解决方案2】:

      试试(**it).ns_member1

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-30
        • 2015-01-13
        • 2014-12-26
        • 2015-09-26
        • 1970-01-01
        • 2015-07-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多