我注意到QMap::operator[](const Key & key)有这两个重载:
T & QMap::operator[](const Key & key)
const T QMap::operator[](const Key & key) const
Run Code Online (Sandbox Code Playgroud)
是否有理由按价值返回?
因为我们有移动语义:
当按值返回时,我们应该返回const值吗?
我问的原因是这样的:
想象一下,我们有:
class ExpensiveToCopy;
{
public:
int someProperty() const;
...
}
void f(const QMap<int, ExpensiveToCopy>& map)
{
int lala = map[4].someProperty(); // We need to copy the entire object
// just to look at someProperty();
}
Run Code Online (Sandbox Code Playgroud)
And*_*rii 12
在这种const情况下,const如果元素尚不存在,我们就无法向地图添加元素,因此将返回本地对象.
否则,在非const大小写的情况下,在返回对它的引用之前,将使用指定的键创建一个元素(如果没有已经存在的那个).