显然,
for ( int i = 0; i != n; ++i )
与
的作用相同for ( int i = 0; i < n; ++i )
但开发人员对前者感到不安是否正常?我总是担心一些怪异的事故会使前循环中的i
“错过”n
。然而,在第二个循环中,如果i
以某种方式停止正确递增,那么<
运算符将充当障碍。
这使我今天想到了一个问题,即在各种各样的怪异事故中,这个问题实际上更有可能失败。这里对编译器/硬件有所了解的人可能会对我有答案。
答案 0 :(得分:2)
我可以同情你,因为当我开始编程时,我也有同样的感受。它只是你必须得到使用的东西。这两种方法都有时间和地点。例如,如果您正在使用c ++标准库,请使用第一种方法:
for (std::vector<int>::iterator it = myvector.begin() ; it != myvector.end(); ++it)
如果您只是循环固定次数,则惯例是使用第二种方法:
for (unsigned int i = 0; i < N, i++)
不要浪费时间担心硬件问题。这是别人的工作。
答案 1 :(得分:1)
我认为更喜欢&lt;选项(我一直使用)不是为了防止硬件故障(不可行,因为根据定义,所有的赌注都是关闭的,除非你编写非常特殊的内核/ fw代码),但要防止出现逻辑错误(并且感觉更安全一些)一些基本的人类本能原因不是出于逻辑原因。)
被保护的错误类型是在循环内修改循环计数器的地方。
反驳论点是任何改变i的代码都是&gt; n可能是错误的(除非这是某人强制循环退出的方式 - 一个坏主意恕我直言)所以你应该允许循环运行在数组的末尾并失败(假设你在一个检测到结束访问的平台上一个数组,Java,c#,...)。