我应该在基于 C++11 范围的 QHash::keys() 上使用 qAsConst 吗?

Should I use qAsConst on QHash::keys() in a C++11 range-based for

在这篇来自 KDAB 的文章 Goodbye, Q_FOREACH 中,他们警告说基于范围的 for 可能会导致 Qt 容器分离。
另见此处:

我知道 for 会导致分离,因为如果容器不是 const,它会调用一些非常量迭代器。
QHash::keys() return 值是否相同?
keys() 函数是常量,所以我的地图不会分离,但是 return 值是按值传递的,所以我会复制 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)
}

error: use of deleted function 'void qAsConst(const T&&) [with T = QList]'

创建一个临时的 keys() 容器只是为了迭代它,无论如何都是一个非常慢的解决方案。更喜欢使用迭代器。