我對C++中使用無符號整數而不是有符號整數的循環進行了反轉的Stackoverflow做了一些研究。但我仍然不明白爲什麼會出現問題(請參閱Unsigned int reverse iteration with for loops)。爲什麼下面的代碼會產生分段錯誤?C++ for循環中的無符號整數
#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','i> = 0'總是如此,所以循環永遠不會終止。 – TonyK 2012-01-28 08:58:35
閱讀編譯器警告,它們很有用。在這種情況下,您的編譯器應該已經警告過您,循環中的條件始終爲真。 – dragonroot 2012-01-28 09:20:05
@dragonroot:不幸的不是。我使用g ++的-Wall標誌。你知道一個編譯器標誌可以檢測到這種問題嗎?謝謝。 – Benjamin 2012-01-28 09:27:44