文档只是简单地说明了这一点(即它会自动复制容器),但没有解释为什么:
Qt在进入foreach循环时自动复制容器。如果您在迭代时修改容器,则不会影响循环。(如果您不修改容器,则仍会发生复制,但由于隐式共享,复制容器非常快。)由于foreach创建容器的副本,因此使用非const引用变量不能修改原始容器。它只会影响副本,这可能不是您想要的。
对我来说,这看起来像是一种自我限制,使得Qt的
我听说boost的
那么这种复制背后的原理是什么?
Qt在进入foreach循环时自动复制容器。如果您在迭代时修改容器,则不会影响循环。(如果您不修改容器,则仍会发生复制,但由于隐式共享,复制容器非常快。)由于foreach创建容器的副本,因此使用非const引用变量不能修改原始容器。它只会影响副本,这可能不是您想要的。
对我来说,这看起来像是一种自我限制,使得Qt的
foreach
比它本可以更有用-现在您无法使用它来修改元素。我听说boost的
foreach
和新的C++11 for (auto iter : array)
不执行复制(尽管我不熟悉它们中的任何一个)。那么这种复制背后的原理是什么?