【发布时间】:2011-10-12 14:21:05
【问题描述】:
在下面的代码段中
vector<SceneObject *> sceneObjs;
vector<SceneObject *>::iterator iter;
iter = sceneObjs.begin();
while (iter != sceneObjs.end()){
cout << **iter <<endl;
iter++;
}
为什么 **iter 有两个 *s ?
【问题讨论】:
在下面的代码段中
vector<SceneObject *> sceneObjs;
vector<SceneObject *>::iterator iter;
iter = sceneObjs.begin();
while (iter != sceneObjs.end()){
cout << **iter <<endl;
iter++;
}
为什么 **iter 有两个 *s ?
【问题讨论】:
第一个 * 取消对迭代器的引用,给出一个 SceneObject * 指针。第二个 * 取消引用这个 SceneObject * 指向 SceneObject 本身的指针。
【讨论】:
因为*iter 是SceneObject *& - SceneObject 指针。您需要取消引用它才能获得真正的SceneObject。
【讨论】:
*iter实际上是一个SceneObject*&,但它并没有改变这里的其余部分。
SceneObject*& 引用,因为该函数可以将 *it 的内容替换为另一个值。当你有一个函数void setNull(SceneObject*& obj){obj=NULL;} 时,调用setNull(*iter); 将迭代器的内容设置为NULL。
因为*iter 返回一个SceneObject*,然后第二个* 将再次取消引用。
【讨论】:
第一个* 返回迭代器中的值,一个SceneObject* 指针。第二个* 引用该指针,给出SceneObject。我怀疑<< 的过载将 SceneObject` 渲染为流。
【讨论】: