Qt의 포리치 키워드

foreach 키워드

참고: foreach 키워드는 C++11 범위 기반 루프가 존재하기 전에 도입되었습니다. 새로운 코드는 C++11 범위 기반 루프를 선호해야 합니다.

foreach 키워드는 C++ 언어에 Qt 전용으로 추가된 것으로, 전처리기를 사용하여 구현됩니다.

구문은 foreach (변수, 컨테이너) 문입니다. 예를 들어 foreach 를 사용하여 QList<QString>를 반복하는 방법은 다음과 같습니다:

QList<QString> values;...QString str; foreach (str, values)    qDebug() << str;

foreach 코드는 반복기를 사용하는 동등한 코드보다 훨씬 짧습니다:

QList<QString> 값;...QListIterator<QString> i(values);while (i.hasNext()) {}  QString s = i.next();    qDebug() << s;
}

데이터 유형에 쉼표가 포함되지 않는 한(예: std::pair<int, int>), 반복에 사용되는 변수는 foreach 문 내에서 정의할 수 있습니다:

QList<QString> 값;...foreach(const QString &str, values)    qDebug() << str;

다른 C++ 루프 구조와 마찬가지로 foreach 루프 본문 주위에 중괄호를 사용할 수 있으며, break 을 사용하여 루프를 종료할 수 있습니다:

QList<QString> 값;...foreach(const QString &str, values) { if (str.isEmpty()) break;    qDebug() << str;
}

QMapQHash 을 사용하면 foreach 이 (키, 값) 쌍의 값 구성 요소에 자동으로 액세스하므로 컨테이너에서 values()를 호출해서는 안 됩니다(불필요한 복사본을 생성할 수 있습니다. 아래 참조). 키와 값을 모두 반복하려면 더 빠른 이터레이터를 사용하거나 키를 가져와서 값도 가져오는 데 사용할 수 있습니다:

QMap<QString,  int> map;...foreach(const QString &str, map.keys())    qDebug() << str << ':' << map.value(str);

다중 값 맵의 경우:

QMultiMap<QString,  int> map;...foreach(const QString &str, map.uniqueKeys()) { foreach(int i, map.values(str))        qDebug() << str << ':' << i;
}

Qt는 foreach 루프에 들어갈 때 컨테이너의 복사본을 자동으로 가져옵니다. 반복하는 동안 컨테이너를 수정해도 루프에 영향을 미치지 않습니다. (컨테이너를 수정하지 않으면 여전히 복사가 수행되지만 암시적 공유 덕분에 컨테이너 복사가 매우 빠릅니다).

foreach는 컨테이너의 복사본을 생성하기 때문에 변수에 대해 컨스트가 아닌 참조를 사용하면 원본 컨테이너를 수정할 수 없습니다. 복사본에만 영향을 미치므로 원하지 않을 수도 있습니다.

Qt의 foreach 루프에 대한 대안으로 C++11 이상에 포함된 범위 기반 for 이 있습니다. 그러나 범위 기반 for 은 Qt 컨테이너를 강제로 분리할 수 있지만 foreach 은 그렇지 않다는 점에 유의하세요. 하지만 foreach 을 사용하면 항상 컨테이너가 복사되므로 일반적으로 STL 컨테이너의 경우 비용이 저렴하지 않습니다. 확실하지 않은 경우 Qt 컨테이너의 경우 foreach, STL 컨테이너의 경우 범위 기반 for 을 선호합니다.

QT_NO_FOREACH 매크로를 정의하여 Qt의 foreach 루프의 가용성을 제거할 수 있습니다.

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.