为什么QMap :: operator [](const Key&key)按值返回?

Mar*_*dik 9 c++ qt c++11

我注意到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大小写的情况下,在返回对它的引用之前,将使用指定的键创建一个元素(如果没有已经存在的那个).

  • 这正是它.我正准备写同样的答案.注意`std :: map`没有`const operator []`,这可能是一件好事.不那么困惑. (3认同)