gpt4 book ai didi

c++ - 循环条件评估

转载 作者:IT老高 更新时间:2023-10-28 12:58:38 25 4
gpt4 key购买 nike

只是一个简单的问题。

我有一个看起来像这样的循环:

for (int i = 0; i < dim * dim; i++)

for 循环中的条件是否在每个循环中都重新评估?

如果是这样,做这样的事情会更有效率吗?:

int dimSquare = dim * dim;
for (int i = 0; i < dimSquare; i++)

谢谢

-伪造

最佳答案

是的,从语义上讲,它将在每个循环上进行评估。在某些情况中,编译器可能能够自动从循环中删除条件 - 但并非总是如此。特别是:

void foo(const struct rect *r) {
for (int i = 0; i < r->width * r->height; i++) {
quux();
}
}

在这种情况下,编译器将无法将乘法移出,因为它知道 quux() 会修改 r

一般来说,通常只有局部变量才有资格将表达式从循环中提升出来(假设您从不获取它们的地址!)。虽然在某些情况下结构成员也可能符合条件,但有很多事情可能导致编译器假设内存中的所有内容都已更改 - 例如,写入几乎任何指针,或调用几乎任何函数。因此,如果您在那里使用任何非本地变量,最好假设不会发生优化。

也就是说,一般来说,我只建议主动将可能昂贵的代码移出条件:

  • 这样做不会影响可读性
  • 显然会花费非常很长时间(例如,网络访问)
  • 或在分析中显示为热点。

关于c++ - 循环条件评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1242185/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com