значения двух ** для итератора - PullRequest
4 голосов
/ 12 октября 2011

В следующем сегменте кода

vector<SceneObject *> sceneObjs;
vector<SceneObject *>::iterator iter;

iter = sceneObjs.begin();
while (iter != sceneObjs.end()){
  cout << **iter <<endl;
  iter++;
}

почему у ** iter есть два * s?

Ответы [ 4 ]

12 голосов
/ 12 октября 2011

Первый * разыменовывает итератор, давая указатель SceneObject *.Второй * разыменовывает этот SceneObject * указатель на сам SceneObject.

11 голосов
/ 12 октября 2011

Поскольку *iter является SceneObject *& - a SceneObject указателем . Вам нужно разыменовать его, чтобы добраться до реального SceneObject.

5 голосов
/ 12 октября 2011

Поскольку *iter возвращает SceneObject*, который затем будет снова разыменован второй *.

3 голосов
/ 12 октября 2011

Первый * возвращает значение в итераторе, указатель SceneObject*.Второй * задерживает этот указатель, давая SceneObject.Я подозреваю, что есть перегрузка для <<, которая делает SceneObject` потоком

...