我已经重新提出了我的问题:
我正在读一本书,其中作者提供了以下代码示例:
while(do_something && i<imax){
i++;
}
do_something
正在阅读文件:input_file >> array[amountRead];
这让我想知道他为什么不写简单:
while(i<imax){
do_something;
i++;
}
上述两个代码示例有什么区别?它与性能有关吗?
答案 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;其中可能会或可能不会表现为性能下降。如果你关心性能,那就是基准。