簡體   English   中英

難以理解的無限向后循環C ++

[英]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,因為iunsigned ,這意味着它永遠不會低於零。 如果在i為零時減小該值,則將發生所謂的下溢,並且其數值將很高。

第一個版本肯定可以完成工作,因此我會堅持下去。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM