2011-02-05 1 views

답변

3

넵. 그것은 반환 된 컨테이너의 복사본을 생성하고이를 사용합니다.

관련을 (Qt foreach keyword 설명서를 참조하십시오) :

  • Qt는 foreach는 항상 복사 용기, 그것은 가장 (기록 중 복사됩니다) QT-용기 또는 작은 STL 컨테이너 함께 사용할 것입니다.
  • Boost's foreach은이 점을보다 잘 처리하고 필요한 경우가 아니면 복사를 방지합니다. 성능 부분에 관해서는
+0

읽어 복사 루프 원래 용기 수정 허용 아무것도 깨지 않고. 아니면 부스트와도 안전할까요? 절대로 사용하지 마십시오. –

+0

@Sergey : 사실,이 경우에 명시적인 사본을 만들 것입니다. 경험상, 훨씬 더 일반적인 경우는 아무것도 수정하지 않고 (즉, 반복 만하면됩니다.) 원본을 수정하고 싶기 때문입니다 컨테이너. – Macke

+1

사실, Qt에서는 컨테이너가 암시 적으로 루프 내부에서 수정된다는 경우가 있습니다. 예를 들어, 루프에서 신호를 내보내는 몇 가지 메소드 호출이있을 수 있으며, 그 신호에 연결된 일부 슬롯이 컨테이너를 수정합니다. 이것은 하나의 스레드 내에서 모든 것이 여전히 발생하기 때문에 멀티 스레딩만큼 나쁘지는 않지만 메소드 호출 순서는 그리 명확하지 않을 수 있습니다. –