我尝试执行以下操作:
QList<QString> a;
foreach(QString& s, a)
{
s += "s";
}
Run Code Online (Sandbox Code Playgroud)
看起来它应该是合法的,但我最终抱怨它cannot convert from 'const QString' to 'QString &'.
为什么Qt foreach用const引用迭代?
jam*_*raa 21
正如Qt通用容器文档中所述:
Qt在进入foreach循环时自动获取容器的副本.如果在迭代时修改容器,则不会影响循环.(如果不修改容器,副本仍然会发生,但由于隐式共享复制容器非常快.)同样,声明变量是非const引用,以便修改当前项目该列表也不起作用.
它会创建一个副本,因为您可能希望从列表中删除项目或在循环时添加项目.缺点是你的用例不起作用.您将不得不迭代列表:
for (QList<QString>::iterator i = a.begin(); i != a.end(); ++i) {
(*i) += "s";
}
Run Code Online (Sandbox Code Playgroud)
打字多一点,但不要太多.
或者你可以使用
QList<QString> a;
BOOST_FOREACH(QString& s, a)
{
s += "s";
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14226 次 |
| 最近记录: |