gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:35:44 28 4
gpt4 key购买 nike

我想知道对 Qt 容器内的值的引用,尤其是 QHashQMap 的有效期有多长。我所说的有效是指在插入或删除其他元素后是否保证仍指向映射/哈希内的正确位置。

让我们看下面的代码:

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 或者它会导致段错误还是未定义(所以有时工作,其他时候出现段错误,这取决于是否必须在内部重组数据结构,例如调整哈希表数组的大小)。 QMapQHash 的行为是否相同,或者一个有效而另一个无效?

最佳答案

the documentation 中对此进行了全面介绍— 你一定错过了!

Iterators of both types are invalidated when the data in the container is modified or detached from implicitly shared copies due to a call to a non-const member function.

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

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

关于c++ - QMap/QHash operator[] 返回引用有效性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7947082/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com