Я провел некоторое исследование Stackoverflow об обратном для циклов на C++, которые используют целое число без знака вместо подписанного. Но я до сих пор НЕ понимаю, почему возникает проблема (см. Unsigned int reverse iteration with for loops). Почему следующий код даст ошибку сегментации?Целые числа без знака в C++ для циклов
#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 будет равен нулю, потому что есть что-то вроде переполнения. Но я думаю, что целое число без знака разрешено принимать нулевое значение, не так ли? Теперь, если я заменил его на целое число со знаком, нет абсолютно никакой проблемы.
Может ли кто-нибудь объяснить мне механизм за этим обратным циклом с целым числом без знака?
спасибо!
'i> = 0' всегда верно для unsigned' i', поэтому цикл никогда не заканчивается. – TonyK
Прочтите предупреждения компилятора, они полезны. В этом случае ваш компилятор должен, вероятно, предупредить вас о том, что условие в вашем цикле всегда истинно. – dragonroot
@dragonroot: К сожалению, нет. Я использую флаг -Wall g ++. Знаете ли вы флаг компилятора, который обнаружит эту проблему? Благодарю. – Benjamin