C++遞增運算符
回答
我++是postincrement和++我是preincrement。前者允許你在表達式中使用i的值,然後在結尾增加i。稍後我會先增加,然後允許您使用它。例如:
int value_of_i_before_increment=i++;
和
int value_of_i_after_increment=++i;
+1:雖然命名爲current_i會更好。 – bjskishore123 2010-10-15 03:55:22
@ bjskishore123,改變更明顯... – 2015-12-17 16:03:21
我會後聲明++ i遞增。 ++我在語句評估之前遞增i。
是的。
i ++是post-increment。它返回i的副本,然後遞增i的值。
++ i是預增量。它遞增我然後返回我的價值。
等待等待。沒有指定順序(這是許多新手出錯的地方,並開始相信某些C++表達式在實踐中必須具有明確定義的效果)。由於「++」在(後)「i」之後,i ++是後增量的;它會遞增「i」的值並返回「i」的原始值,順序不特定。 :-)我知道,當你想到如何將它作爲一項任務時,這聽起來可能很瘋狂。你需要考慮的是編譯器如何在寄存器中保存值並重用它們。 – 2010-10-15 03:51:16
@Alf P. Steinbach:我的意思是說你的觀點沒有實際效果,除非你正在做一些線程不安全的事情?或者可以在單線程環境中以某種方式出現? – 2010-10-15 03:56:32
@斯科特:不對1,對第二。考慮'++ x = 42'。當考慮預先增量作爲第一次增量,然後產生對x的引用時,這怎麼會產生任何東西,但是x被設置爲42?然而,它在C++ 98中是正式的UB,因爲它在序列點之間修改了兩次x。它與允許編譯器假定最多隻有一次x的變化有關,並且x不會被修改和使用,所以它可以在寄存器中執行任何操作,而不用擔心最終的值, (「正確」或「錯誤」),它可以在完整表達式的最後存儲到mem。 – 2010-10-15 05:22:09
++c
是預增量,因此您在使用它之前遞增該值,並且c++
是後增量,因此您使用該值然後遞增它。
int c;
c = 5;
cout << c++; // prints 5, then sets the value to 6
c = 5;
cout << ++c // sets the value to 6, then prints 6
因此,這可以在迴路的影響,等等。即
int i;
for (i=0; i < 2; i++) cout << i; // prints 0, then 1
for (i=0; i < 2; ++i) cout << i; // prints 1, then 2
也有潛在的性能問題。有關更多信息,請參閱this post。
- 1. 運作遞增運算符
- 2. 上遞增/遞減運算在C++
- 3. C增量運算符
- 4. C++增加運算符
- 5. 遞增和遞減運算符
- 6. 用PHP三元運算符遞增值
- 7. 預/後遞增運算符和數組
- 8. 問題有關遞增運算符
- 9. 超載後遞增運算符
- 10. 增量遞減的按位運算符
- 11. 在條件運算符中增加運算符c
- 12. 增量運算符
- 13. C#遞增運算符(++)問題:爲什麼我輸出錯誤?
- 14. C++後綴遞增運算符的常量返回類型
- 15. 遞增運算符在PHP和C語言
- 16. C#++一元運算符增量問題
- 17. C++重載增量運算符
- 18. C++/g ++過載增量運算符
- 19. 如何自動定義遞增/遞減/ etc運算符?
- 20. 行爲遞增運算符作爲參數傳遞給函數
- 21. 後增量運算用C
- 22. 預增加運算符
- 23. 後增量運算符++
- 24. 增量運算符java
- 25. C++運算符 ''
- 26. 運算符[] [] C++
- 27. C++:運算符重載,運算符+
- 28. 迭代器中的C++後遞增運算符重載(使用-Wall -Werror編譯)
- 29. 遞增++運算符不設置反應狀態
- 30. 的Java運算符優先級與+ =和++(前遞增)
不要忘記序列點! – dreamlax 2010-10-15 03:58:52