이 코드가있는 경우 : selectedItems()
한 번만Qt의 foreach에서 두 번째 용어는 한 번만 평가됩니까?
foreach (QListWidgetItem *ii, selectedItems()) {
urls.push_back(ii->data(Qt::ToolTip).toString());
}
를 호출 할 것인가를?
이 코드가있는 경우 : selectedItems()
한 번만Qt의 foreach에서 두 번째 용어는 한 번만 평가됩니까?
foreach (QListWidgetItem *ii, selectedItems()) {
urls.push_back(ii->data(Qt::ToolTip).toString());
}
를 호출 할 것인가를?
넵. 그것은 반환 된 컨테이너의 복사본을 생성하고이를 사용합니다.
관련을 (Qt foreach keyword 설명서를 참조하십시오) :
읽어 복사 루프 원래 용기 수정 허용 아무것도 깨지 않고. 아니면 부스트와도 안전할까요? 절대로 사용하지 마십시오. –
@Sergey : 사실,이 경우에 명시적인 사본을 만들 것입니다. 경험상, 훨씬 더 일반적인 경우는 아무것도 수정하지 않고 (즉, 반복 만하면됩니다.) 원본을 수정하고 싶기 때문입니다 컨테이너. – Macke
사실, Qt에서는 컨테이너가 암시 적으로 루프 내부에서 수정된다는 경우가 있습니다. 예를 들어, 루프에서 신호를 내보내는 몇 가지 메소드 호출이있을 수 있으며, 그 신호에 연결된 일부 슬롯이 컨테이너를 수정합니다. 이것은 하나의 스레드 내에서 모든 것이 여전히 발생하기 때문에 멀티 스레딩만큼 나쁘지는 않지만 메소드 호출 순서는 그리 명확하지 않을 수 있습니다. –
단지 한편 http://stackoverflow.com/questions/771008/for-loop-vs-foreach-in-c – speakman