我应该在基于C 11范围的for qhash :: keys()上使用qasconst



在本文中 Goodbye,q_foreach 来自KDAB,他们警告说,基于范围的for可能会导致QT容器的分离。
另请参阅此处:在qt

中正确使用C 11范围进行循环

我知道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]'

创建一个临时键()容器以迭代它,这是一个非常缓慢的解决方案。更喜欢使用迭代器。

相关内容

  • 没有找到相关文章

最新更新