我想知道对Qt容器内的值(尤其是QHash
或QMap
)的引用有效期有多长时间。所谓有效,是指在插入或删除其他元素之后,如果可以保证仍指向 map /哈希内的正确位置。
让我们下面的代码:
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
将在最后一行设置该值会正确地将与
a
相关的值更新为3
,或者会导致段错误或未定义(因此有时会进行段错误,这取决于是否必须在内部重新组织数据结构,例如调整哈希表数组的大小)。 QMap
和QHash
的行为是否相同,或者一种可行,而另一种不可行? 最佳答案
the documentation全面介绍了这一点-您一定错过了!
因此,尽管我希望迭代器/引用在上面描述的场景中在实践中仍然有效,但是您不应依赖于此。 以这种方式使用它们将调用未定义的行为。
这适用于QHashIterator
和QMutableHashIterator
以及裸引用。提防声称相反的非权威性引用,它依赖于随时可能更改的实现细节。