c++ - 动态删除代码?

标签 c++ dynamic

我在 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/

相关文章:

elasticsearch - 使用动态字段名称搜索ElasticSearch

html - 具有动态高度的 CSS div 以响应背景图像

C++从STL::multimap中查找范围内的元素数

c++ - 虚幻引擎 4 (ue4) 中带有自定义 c++ 蓝图函数库的蓝图循环/for/while 节点

c++ - Windows 服务程序中退出函数的作用

dynamic - Elastic Search 何时添加动态映射

c++ - 字符串操作 C++

c++ - 为什么模板只能在头文件中实现?

javascript - 使用 jQuery 无法动态添加多个元素

c# - 动态类型转换?