[英]Incomprehensible infinite backward loop C++
我是C ++的新手,我試圖實現向后的for循環,我建立了很好的解決方案,但我想知道我的版本不正確並進行無限循環。
這是我創建的一個工作版本(我不知道如何在這種情況下減少i
。):
for (unsigned i = size ; i-- > 0 ; )
{
// do stuff with i
}
這是我寫的一個版本,可以工作,但是不要降為0(這種方式對我來說似乎更合邏輯):
for (unsigned i = size-1 ; i > 0 ; i--)
{
// do stuff with i
}
如果我舉例說n=10
,如果我在循環中print
i
,我會得到這個:
9
8
7
6
5
4
3
2
1
這對我來說更合乎邏輯,應該降為零,但提供了無限循環的版本。
for (unsigned i = size-1 ; i >= 0 ; i--)
{
// do stuff with i
}
有人可以向我解釋為什么最新版本不起作用,什么是最佳選擇?
unsigned
數始終 > =0。(當其為零時,進一步遞減會將其設置為std::numeric_limits<unsigned>::max()
)
因此,您的最終for
循環等於
for (unsigned i = size-1 ; true ; i--)
當然,它會永遠循環。
在第一個循環中,您將i-- > 0
作為停止條件。 當i
為零時, i--
是值為零的表達式 (因此循環暫停),盡管事實上i
隨后將其設置為std::numeric_limits<unsigned>::max()
。 一些人喜歡(包括我;暗示下投票)寫i-->0
並將-->
當作滑動運算符 。 請參閱什么是C ++中的“->”運算符?
語句i >= 0
始終為true,因為i
是unsigned
,這意味着它永遠不會低於零。 如果在i
為零時減小該值,則將發生所謂的下溢,並且其數值將很高。
第一個版本肯定可以完成工作,因此我會堅持下去。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.