foreach 是 Qt 框架提供的一个便利宏,用于简化容器遍历操作。它提供了一种更简洁、更易读的方式来迭代容器中的元素,类似于 C++11 引入的范围 for 循环。
主要特点
1、自动类型推导 无需显式声明迭代器类型或使用 auto,编译器自动推断元素类型:
2、隐式容器复制 遍历前会创建容器的临时副本(避免原始容器被修改的影响):
QVector<int> vec = {1, 2, 3};
foreach (int num, vec) {
vec.append(num * 10); // 修改原始容器不影响遍历
}
// vec 最终为 [1, 2, 3, 10, 20, 30]
3、支持常见容器 兼容 Qt 容器和 STL 容器:
// Qt 容器
foreach (QString key, map.keys()) { ... }
// STL 容器
std::list<double> values;
foreach (double val, values) { ... }
4、只读安全遍历 防止在遍历时意外修改容器结构(添加/删除元素),但允许修改元素值:
QList<QWidget*> widgets;
foreach (QWidget *w, widgets) {
w->setVisible(false); // 允许修改元素
// widgets.removeOne(w); // 错误!会崩溃
}