在本文中 Goodbye,q_foreach 来自KDAB,他们警告说,基于范围的for
可能会导致QT容器的分离。
另请参阅此处:在qt
我知道for
会导致分离,因为如果容器不是const。QHash::keys()
返回值是否相同?keys()
函数是const,因此我的地图不会分离,但是返回值是按值传递的,所以我将两次复制Qlist?
那么,我应该这样循环吗?
for(auto key : qAsConst(map.keys())) {
// do something with key or map.value(key)
}
否,它甚至都不编译(QT5.9 -MSVC 2015):
QMap<QString, int> map;
for(auto key : qAsConst(map.keys())) {
// do something with key or map.value(key)
}
错误:使用已删除函数'void qasconst(const t&amp;&amp;)[带有t = qlist]'
创建一个临时键()容器以迭代它,这是一个非常缓慢的解决方案。更喜欢使用迭代器。