我在 C++ 中的 for 循环中,我希望它内部的“if”子句在下一次迭代中消失(为了性能)在它检查一次值是否为 true 之后。这在 C++ 或任何其他语言中可能吗?
最佳答案
动态更改代码没有魔法。如果 if
条件的执行成本很低,则在循环中执行 if
子句可能不会非常昂贵。
如果条件的评估成本很高,您可能希望使用额外的 bool 变量保护它:
bool mustCheck = true;
size_t const n = ...; // number of iterations
for (size_t i = 0; i < n; ++i) {
if (mustCheck && theExpensiveCheck(...)) {
mustCheck = false; // turn off the check now
....
}
...
}
如果目标是仅在第一次迭代时执行检查,您可以测试循环索引是否为 0
:
for (size_t i = 0; i < n; ++i) {
if (i == 0 && theExpensiveCheck(...)) {
....
}
...
}
另一种在循环内没有if
的选项是完全取出if
,如果循环至少有一次迭代,则在循环之前执行它:
size_t const n = ...; // number of iterations
if (n > 0) {
// do check and execute loop body for first item
if (theExpensiveCheck()) {
....
}
}
// start regular loop, starting at index 1
for (size_t i = 1; i < n; ++i) {
// execute loop body for other items
...
}
上述修改为您的代码增加了额外的复杂性(并因此增加了潜在的错误)。如果不清楚循环或 if
条件是否确实存在执行问题,我建议不要执行任何这些修改。通常情况下,应用上述修改不会带来实质性的性能提升,但显然这取决于 if
条件。
如今的编译器还提供了几种强大的循环优化技术,因此您应该确保在编译时启用所有这些优化。
关于c++ - 动态删除代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32278643/