我会通过对性能(提示:没有区别,检查产生的IR或组装的证明),然而还有在语法和维护两个重要的区别。
语法
i
所述变量的范围是不同的。在for
的情况下,i
只能在for
标头和机体内访问,而在while
的情况下,它在循环后可用。作为一般规则,最好有更严格的范围,更少的变量正在进行中的意味着编码时不必担心的上下文。
维护
的for
循环有分组的所有操作并拢迭代整齐的优势,这样他们就可以一次性检查等检查。
而且,存在引入continue
语句时一个重要的不同:
for(int i = 0; i != 10; ++i) {
if (array[i] == nullptr) { continue; }
// act on it
}
int i = 0;
while (i != 10) {
if (array[i] == nullptr) { continue; }
// act on it
++i;
}
在while
情况下,引进continue
创造了一个错误:无限循环,当计数器不再执行。
影响
for
循环是更具可读性和全能更好地为定期迭代模式。更妙的是,在C++ 11的范围内,对声明:
for (Item const& item : collection) {
}
其中迭代完全由编译器的照顾,所以你一定不要乱了! (它使for_each
算法有些毫无意义......和形式开始撤退,我们可以希望老)
通过corrolary:while
循环应在代码审查保留不规则的迭代模式,这样,他们将吸引优抚从未来的维护者通过突出显示的不规范的情况。
一个编译器设置为opmizing的速度可能只是发出'print(i)'五次,并完全消除循环。在这两种情况下。 – Joey 2012-02-17 10:58:14
在现实世界中,我们关注代码的可读性,并根据它选择“for”或“while”。编译器会优化差异。或者现代机器上的差别很小,因此可以忽略不计。使用那个让你的生活更轻松的,而不是电脑的“生活”。 – Bazzz 2012-02-17 10:59:58
如果没有设置优化,然后? – wali 2012-02-17 11:00:14