Qt foreach() 只迭代一次,忽略其余项目

Qt foreach() only iterates once, ignoring the rest of the items

我正在尝试向较​​旧的 Qt4 应用程序添加一些功能,但我是 Qt 的新手。该应用程序使用 foreach 关键字,我认为它是 implemented by Qt。然而,所有 foreach 在应用程序中仅循环 运行 一次,无论容器中的项目数量如何。

我将此完整性检查添加到应用程序中:

QString test("1234");

int i = 0;
foreach (QChar c, test) {
    i++;
}

int stl = 0;
for (QString::iterator j = test.begin(); j != test.end(); j++) {
    stl++;
}

qDebug()
    << "string:" << test
    << "size:" << test.size()
    << "foreach:" << i
    << "stl:" << stl
;

它总是显示这条信息:

string: "1234" size: 4 foreach: 1 stl: 4

我用上面的 QStringQModelIndexList 测试了它,每次它只 运行 循环一次,即使容器报告有多个项目,并且在这两种情况下,STL 样式循环都可以正常工作,只有 foreach 提前退出循环。

我做错了什么?该应用程序是针对 Qt 4.8.7 构建的。

郑重声明,事实证明这是 GCC 9 (bug report) 的行为变化,涉及 break; 语句应该出现的位置以及它们的作用。

似乎 GCC 9 之前的版本做了错误的事情,但 Qt 4 是围绕该行为编写的,所以一旦它在 GCC 9 中得到修复,Qt 的 foreach 循环就崩溃了。

looks like it has been addressed 在最近的 Qt 版本中,但不幸的是在 Qt 4 中没有。