QMap/QHash operator []返回引用有效性

Jan*_*net 6 c++ qt dictionary qmap

我想知道对Qt容器内的值的引用有多长,特别是a QHash或a QMap是有效的.有效我的意思是,如果在插入或删除其他元素后仍保证指向map/hash中的正确位置.

让我们以下代码:

QHash<char,int> dict; // or QMap<char,int> dict;
dict.insert('a', 1);
int& val(dict['a']);

dict.insert('b', 2);

val = 3;             // < will this work or lead to a segfault
Run Code Online (Sandbox Code Playgroud)

将在最后一行的值设置正确地更新与相关联的值a3还是会导致段错误还是会是不确定的(所以有时候工作,段错误其他时间,具体取决于数据结构是否必须进行内部重组,像调整散列表数组).是行为同为QMapQHash,或将一个工作和其他不?

Lig*_*ica 4

文档中对此进行了全面介绍- 您一定错过了!

当由于调用非常量成员函数而修改容器中的数据或从隐式共享副本分离时,这两种类型的迭代器都会失效。

因此,尽管我希望迭代器/引用在您上面描述的场景中在实践中保持有效,但您不应依赖于此。以这种方式使用它们将调用未定义的行为。

这适用于QHashIteratorQMutableHashIterator,以及裸引用。谨防那些声称相反的非权威参考文献,它们依赖于随时可能更改的实现细节。