Qt C ++中的QMapbegin函数的明显行为

问题描述

让我们看看使用QMap迭代器的简单代码

#include <QMap>
#include <QDebug>

int main()
{
    QMap<int,QMap<int,int>> testA;
    testA [0][0] = 1;

    QMap<int,int>::iterator _iterTestA;

    for(_iterTestA = testA[1].begin(); _iterTestA!= testA[1].end(); _iterTestA++){
        qDebug()<<"Why am I working!? ";
    }

    qDebug()<<" testA " << testA;

}

预期行为

尝试将迭代器设置为QMap的不存在元素时,代码引发某种错误

真实行为

Qt只是创建了一个内部带有空QMap()的元素testA [1]。

所以输出是:

testA  QMap((0,QMap((0,1)))(1,QMap()))

发生了什么,为什么Qt为我做出决定?

解决方法

该行为已得到充分记录:

T &QMap::operator[](const Key &key)
返回与关联的值 密钥作为可修改的参考。

如果地图不包含带有键的项,则该函数会插入一个 使用键key将默认构造的值放入地图,并返回一个 引用。如果地图包含多个带有钥匙的物品,则此 函数返回对最近插入值的引用。

(重点是我的)