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
我用上面的 QString
和 QModelIndexList
测试了它,每次它只 运行 循环一次,即使容器报告有多个项目,并且在这两种情况下,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 中没有。
我正在尝试向较旧的 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
我用上面的 QString
和 QModelIndexList
测试了它,每次它只 运行 循环一次,即使容器报告有多个项目,并且在这两种情况下,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 中没有。