在";对于";循环,是否在每次迭代中重新评估终止条件

本文关键字:quot 新评估 终止 条件 评估 循环 对于 是否 迭代 | 更新日期: 2023-09-27 18:03:51

可能的重复:
用于循环优化
用于循环优化-是否需要?

例如

  int maxloop = complicated();
   for (int i=0;i<maxloop;i++){}

 for (int i=0;i<complicated();i++){}

编译器是否足够聪明,可以对其进行优化?

while呢?

在";对于";循环,是否在每次迭代中重新评估终止条件

不,编译器不够聪明,无法优化它,因为它无法保证complicated()在多次运行时不会做任何不同的事情。

实际上,您需要将输出分配给一个变量,以避免重新计算开销。编译器不会这样做,因为您可能有一个目标,将方法返回值作为限制(即,您可能需要在每次迭代后重新计算限制(。要测试这一点,只需将Thread.Sleep(5000);放入compilcated()方法中,您就会看到等待时间。

不,不是,因为complicated可能是一个依赖于其他复杂方法的方法,或者在每次迭代后导致不同的行为。

编译器无法对其进行优化,因为在某些情况下,"complexed(("不会每次返回相同的整数。因此,每次都执行该条件。您的第一段代码必须更高效。