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



我正在尝试为较旧的Qt4应用程序添加一些功能,而我是Qt的新手。该应用程序使用foreach关键字,我相信它是由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提前退出循环。

我做错了什么?该应用程序是根据问题4.8.7构建的。

根据记录,这是GCC 9(错误报告(的行为变化,与break;语句应该出现在哪里以及它们的作用有关。

9之前的GCC版本似乎做了错误的事情,但Qt4是围绕这种行为编写的,所以一旦在GCC 9中修复了它,Qt的foreach循环就中断了。

它看起来已经在最近的Qt版本中得到了解决,但不幸的是,在Qt4中没有。

最新更新