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()) { ... }
关于c++ - 在隐式共享容器上使用迭代器时,为什么必须先进行复制?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39275770/