在硬件故障的情况下,哪一个更可能失败:(int i=0;i!=n;++i)或(int i=0;i<;n;++i)

本文关键字:++i int 情况下 硬件故障 lt 哪一个 失败 | 更新日期: 2023-09-27 18:25:37

显然,

for ( int i = 0; i != n; ++i )

工作原理与相同

for ( int i = 0; i < n; ++i )

但是,开发商对前者感到不安是正常的吗?我总是担心一些反常的事故会使前一个循环中的i"错过"n。然而,在第二个循环中,如果i以某种方式停止正确递增,那么<算子将充当屏障。

这让我今天思考了一个问题,即在各种反常事故的情况下,哪一个更可能失败。这里熟悉编译器/硬件的人可能会给我一个答案。

在硬件故障的情况下,哪一个更可能失败:(int i=0;i!=n;++i)或(int i=0;i<;n;++i)

我可以同情你,因为我开始编程时也有同感。这只是你也必须习惯的事情。这两种方法都有时间和地点。例如,如果您使用的是c++标准库,请使用第一种方法:

for (std::vector<int>::iterator it = myvector.begin() ; it != myvector.end(); ++it)

如果你只是循环固定次数,惯例是使用第二种方法:

for (unsigned int i = 0; i < N, i++)

不要浪费时间担心硬件问题。那是别人的工作。

我认为更喜欢<选项(我一直使用)不是为了防止硬件故障(这是不可行的,因为根据定义,除非你正在编写非常特殊的内核/fw代码,否则所有的赌注都是不可能的),而是为了防止逻辑错误(并且出于一些基本的人类本能原因而不是出于逻辑原因而感到更安全)。

要防止的错误类型是在循环中修改循环计数器的地方。

相反的论点是,任何将i更改为>n的代码都可能是错误的(除非这是有人强迫循环退出的方式-IMHO是个坏主意),因此您应该允许循环在数组末尾运行并失败(假设您所在的平台检测到对数组末尾的访问,Java、c#…)。