У меня есть вектор сцен, vector<Scene>
, Как правильно перебирать элементы, как ссылки или нет?
Например это:
BOOST_FOREACH(Scene scene, mScenes)
{
.....
}
Копирует ли макрос сцену для каждой итерации по вектору или использует закулисную ссылку?
Так чем это отличается от этого:
BOOST_FOREACH(Scene& scene, mScenes)
{
.....
}
BOOST_FOREACH
ведет себя точно так, как вы говорите ему, по значению, ссылке или константной ссылке
Ваш первый пример делает скопировать каждый Scene
, Скорее всего, вы хотите второй. С первым вы можете изменить scene
и вектор не будет затронут. Если вы не изменяете вектор, вы должны использовать const Scene& scene
, Если да, используйте Scene &
,
Обратите внимание, что в C ++ 11 вам не нужно использовать BOOST_FOREACH (за исключением некоторых расширенных библиотек, которые возвращают пару итераторов).
for(const Scene& scene: mScenes){}
Применяются те же правила, что и для BOOST_FOREACH: вы, скорее всего, захотите использовать const &, редко &и никогда не копировать.