c – 为什么在隐式共享容器上使用迭代器时首先要进行复制?
发布时间:2020-12-16 03:15:36 所属栏目:百科 来源:网络整理
导读:Qt的文档说明如下: Thanks to implicit sharing,it is very inexpensive for a function to return a container per value. The Qt API contains dozens of functions that return a QList or QStringList per value (e.g.,QSplitter::sizes()). If you wan
Qt的文档说明如下:
// RIGHT const QList<int> sizes = splitter->sizes(); QList<int>::const_iterator i; for (i = sizes.begin(); i != sizes.end(); ++i) ... // WRONG QList<int>::const_iterator i; for (i = splitter->sizes().begin(); i != splitter->sizes().end(); ++i) ... 如果应用“错误”方法会发生什么? 解决方法
对splitter-> sizes()的两个调用产生容器的两个不同副本.由于begin()来自一个和另一个end(),它们不会形成一个有效的范围.然后,循环将从第一个容器的末端走出,进入未定义行为的土地.
基于范围的循环可以正常工作:for(int size:splitter-> sizes()){…} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |