Qt C++中QMap().begin()函数的不明显行为



让我们看看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只是创建了一个元素testA[1],里面有一个空的QMap((。

因此输出为:

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

发生了什么,为什么Qt是我的决定?

该行为已被充分记录:

T &QMap::operator[](const Key &key)
返回与密钥作为可修改的引用。

如果映射中不包含带键的项目,则函数会插入使用key键将默认构造的值添加到映射中,并返回引用它。如果映射包含多个带有key键的项目,则函数返回对最近插入的值的引用。

(强调矿(

最新更新