符号付き整数ではなく符号なし整数を使用する C++ の逆 for ループについて、Stackoverflow で調査しました。しかし、なぜ問題があるのか まだわかりません(for loops を使用した Unsigned int reverse iteration を参照)。次のコードでセグメンテーション違反が発生するのはなぜですか?
#include <vector>
#include <iostream>
using namespace std;
int main(void)
{
vector<double> x(10);
for (unsigned int i = 9; i >= 0; i--)
{
cout << "i= " << i << endl;
x[i] = 1.0;
}
cout << "x0= " << x[0] << endl;
return 0;
}
問題は、オーバーフローのようなものがあるため、インデックス i がゼロになる場合であることを理解しています。しかし、符号なし整数はゼロの値を取ることが許されていると思いますね。これを符号付き整数に置き換えれば、まったく問題ありません。
符号なし整数を使用した逆ループの背後にあるメカニズムを誰かが説明してくれますか?
どうもありがとうございました!