BOOST_FOREACH и вектор

У меня есть вектор сцен, vector<Scene>, Как правильно перебирать элементы, как ссылки или нет?

Например это:

BOOST_FOREACH(Scene scene, mScenes)
{
.....
}

Копирует ли макрос сцену для каждой итерации по вектору или использует закулисную ссылку?

Так чем это отличается от этого:

BOOST_FOREACH(Scene& scene, mScenes)
{
.....
}

2

Решение

BOOST_FOREACH ведет себя точно так, как вы говорите ему, по значению, ссылке или константной ссылке

9

Другие решения

Ваш первый пример делает скопировать каждый Scene, Скорее всего, вы хотите второй. С первым вы можете изменить scene и вектор не будет затронут. Если вы не изменяете вектор, вы должны использовать const Scene& scene, Если да, используйте Scene &,

5

Обратите внимание, что в C ++ 11 вам не нужно использовать BOOST_FOREACH (за исключением некоторых расширенных библиотек, которые возвращают пару итераторов).

for(const Scene& scene: mScenes){}

Применяются те же правила, что и для BOOST_FOREACH: вы, скорее всего, захотите использовать const &, редко &и никогда не копировать.

2