[英]Pre vs Post Increment
我得到了前后增量的基礎,但是當它實際發生在后增量時,我無法理解。
例如,在以下增量后代碼中:
int counter = 10;
int result = 0;
result = counter++ + 10;
cout << "Counter: " << counter << endl;
cout << "Result: " << result << endl;
我知道Counter會出現11,結果為20.結果是20,因為整個函數正在運行, 然后當程序返回0時加上+1; ?
究竟是什么時候加上+1?
謝謝
究竟是什么時候加上+1?
根據標准 :
在修改操作數對象之前,對++表達式的值計算進行排序。
從外行人的角度來看:
counter
計算進行排序,這可能是聲明的整個RHS的一部分,或者只是counter++
。 counter += 1
計算進行排序。 要記住兩件事。
在counter++
的情況下:
該項的值是counter
增加之前的值。
評估該術語的副作用是增加counter
的值。
后增量運算符:后增量運算符用於在完全執行表達式后遞增變量的值,其中使用后增量。 在Post-Increment中,值首先在表達式中使用,然后遞增。
所以在你的情況下
result = counter++ + 10;
在本聲明中使用后增量發生,顯然它會在下一個語句中反映出來。
另外,為了更好地理解,您可以考慮這些松散描述的示例:
the_object
的the_type
作為這樣的功能: the_object = the_object + 1;
return the_object;
the_object
的the_type
作為這樣的功能: the_type backup_of_the_object;
backup_of_the_object = the_object;
the_object = the_object + 1;
return backup_of_the_object;
現在考慮:
result = counter++ + 10;
編譯程序時:
result =
,因此它應該首先確定在=
的右側放置的內容然后生成機器代碼以將其分配給=
的左側,即result
。 counter
但該語句尚未結束,因為;
尚未到達。 所以現在它知道它也必須用counter
做一些事情。 編譯器看到++
但語句尚未結束。 所以現在它知道它必須考慮生成機器代碼以首先執行counter++
。
編譯器看+
。 所以,現在它知道它必須考慮生產機器代碼中加入右側+
和左側+
這是counter++
。
編譯器見10;
最后聲明已經結束。 所以現在它知道它需要知道的一切! 它知道,生產機器代碼執行后, counter++
,它應該產生的機器代碼添加10到outcome_of它。 然后它應該生成機器代碼以將result_of分配給result
。
程序運行時:
counter++
現在counter
是由1因此它是11,但outcome_of(遞增counter++
)是以前的值counter
是10
counter++
)+ 10 現在outcome_of ( outcome_of ( counter++
)+ 10)是outcome_of (10 + 10),即20
result =
outcome_of ( outcome_of ( counter++
)+ 10) 現在result
是20
另請注意,所描述的每個階段都只是關於
result = counter++ + 10;
不管之后會發生什么。 以前的意思
cout << "Counter: " << counter << endl;
cout << "Result: " << result << endl;
很明顯在main()
返回0之前。
在我看來,你應該放輕松,通過編寫和運行一些程序的經驗來學習它!
祝好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.