2012-12-24 8 views
2

나는 장면 벡터 인 vector<Scene>을가집니다. 참조 또는하지 않고 요소를 반복하는 올바른 방법은 무엇입니까?BOOST_FOREACH 및 벡터

예를이를 위해 :

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

매크로 사본이 벡터를 통해 각 반복에 대한 장면합니까, 아니면 배후에 대한 참조를 사용합니까?

는 그래서이 어떠한 다른 :

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

답변

9

BOOST_FOREACH 당신이 값, 참조 또는 const를 참조

5

첫 번째 예 않습니다 사본 각 Scene에 의해, 그에게 정확히 동작합니다. 대부분의 경우, 두 번째를 원합니다. 첫 번째로 scene을 수정할 수 있으며 벡터는 영향을받지 않습니다. 벡터를 수정하지 않으려면 const Scene& scene을 사용해야합니다. 사용중인 경우 Scene &을 사용하십시오.

2

C++ 11에서는 BOOST_FOREACH (한쌍의 반복자를 반환하는 일부 부스트 라이브러리 제외)를 사용할 필요가 없습니다.

for(const Scene& scene: mScenes){} 

동일한 규칙이 BOOST_FOREACH에 관해서는 적용 가능성이 가장 높은 복사 결코 const를 &, 거의 &를 사용하지 않으려합니다.