两个版本的while循环之间的区别?

时间:2013-12-31 02:59:29

标签: c++

我已经重新提出了我的问题:

我正在读一本书,其中作者提供了以下代码示例:

while(do_something && i<imax){
   i++;
}

do_something正在阅读文件:input_file >> array[amountRead];

这让我想知道他为什么不写简单:

while(i<imax){
   do_something;
   i++;
}

上述两个代码示例有什么区别?它与性能有关吗?

1 个答案:

答案 0 :(得分:4)

你在其他地方发表评论:

  

不明白为什么代码的作者就这样写了。 do_something正在读取文件input_file&gt;&gt;阵列[amountRead];

在这种情况下, 功能性 差异可能比性能重要得多。保证作者的现有代码尝试将至少一个元素读入数组,并进一步测试从流到存储在数组中的类型的转换是否成功。第二个版本在从流中读取时忽略错误,无论是在二进制级别还是转换为数组的元素类型,因此无论如何它始终会告诉您i == imax元素读取次数。

关于表现 - 根据您的原始问题

你的第一个循环总是do_something至少一次,而第二个循环首先测试i<imax并且可能会在没有do_something的情况下中断。一般来说,第一个循环将do_something一个额外的时间,这表明如果do_something与循环本身相比耗时,它可能会更慢。

但是让它变得更有趣......说imax对于第二个循环再说一次,这样do_something被称为相同的次数(假设它将要运行)反正至少一次)。第一个循环仍然存在变慢的风险,因为它必须在布尔上下文中考虑do_something的结果(在C ++中可能涉及调用可能需要任何时间的转换函数)和在评估i<imax之前有条件地进行分支。

我只说&#34;冒风险&#34;因为给定了现代CPU执行流程的成本&#34;其中可能会或可能不会表现为性能下降。如果你关心性能,那就是基准。