C++基于范围的for循环优劣
C++ 的范围基 for 循环是对这些更传统循环方式的一种抽象,使得代码更简洁,更容易阅读和维护,同时减少了出错的机会,特别是在涉及复杂数据结构时。如我某个工程中的一个代码段:
QDateTime time = QDateTime::currentDateTime();
for (const QPair<QString, QDateTime> &record : messageBlockRecord) {
if (record.first == message.at(i).uuid) {
//信号间隔时间超时,移除记录,break退出当前循环,并执行添加告警信息栏操作
if (time.secsTo(record.second) > 120) {
// 移除当前QPair
break;
}
//信号间隔时间未超时,不添加新窗,退出循环
else {
continue;
}
}
}
该代码段读取了容器 messageBlockRecord 中所有的 QPair ,并循环比对 QPair 的第一个参数是否等于 message.at(i).uuid ,这没有问题。但是当我们需要修改 messageBlockRecord 中的内容时,这种循环不是一个好办法。以下是参考文献:
直接在基于范围的 for 循环中修改容器(如删除元素)是不安全的,因为这可能会导致迭代器失效,从而引发运行时错误。因此,要移除 QList 中的元素,最好使用传统的 for 循环或者其他方法来安全地迭代和修改列表。
我们在使用基于范围的for循环时会添加 const 和 & 构成常量引用,目的就是避免在循环中对容器中的元素进行修改,其原因或许也是如上所言。

浙公网安备 33010602011771号