首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么foreach使用常量引用进行迭代?

为什么foreach使用常量引用进行迭代?
EN

Stack Overflow用户
提问于 2009-10-21 21:44:18
回答 5查看 15.2K关注 0票数 12

我尝试做以下几件事:

代码语言:javascript
复制
QList<QString> a;
foreach(QString& s, a)
{
    s += "s";
}

这看起来应该是合法的,但我最终得到了一个错误,抱怨它cannot convert from 'const QString' to 'QString &'

为什么Qt foreach使用常量引用进行迭代?

EN

回答 5

Stack Overflow用户

发布于 2009-10-21 23:00:19

正如在Qt Generic Containers Documentation上所解释的:

Qt进入foreach循环时,它会自动获取容器的副本。如果您在迭代时修改容器,则不会影响循环。(如果您不修改容器,复制仍然会发生,但由于隐式共享,复制容器非常快。)同样,为了修改列表中的当前项而将变量声明为非常数引用也不起作用。

它会复制一份,因为您可能想要从列表中删除一项,或者在循环时添加项。缺点是您的用例将无法工作。相反,您将不得不遍历列表:

代码语言:javascript
复制
for (QList<QString>::iterator i = a.begin(); i != a.end(); ++i) { 
  (*i) += "s";
} 

更多的打字,但不会太多。

票数 21
EN

Stack Overflow用户

发布于 2009-10-22 18:49:00

或者您可以使用

代码语言:javascript
复制
QList<QString> a;
BOOST_FOREACH(QString& s, a)
{
   s += "s";
}
票数 5
EN

Stack Overflow用户

发布于 2009-10-21 22:07:53

我相信Qt的foreach在迭代之前会获取原始集合的临时副本,因此使用非常量引用是没有任何意义的,因为修改临时副本将没有任何效果。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1600928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档