2010-10-15 96 views

回答

3

我++是postincrement和++我是preincrement。前者允許你在表達式中使用i的值,然後在結尾增加i。稍後我會先增加,然後允許您使用它。例如:

int value_of_i_before_increment=i++; 

int value_of_i_after_increment=++i; 
+0

+1:雖然命名爲current_i會更好。 – bjskishore123 2010-10-15 03:55:22

+0

@ bjskishore123,改變更明顯... – 2015-12-17 16:03:21

2

我會後聲明++ i遞增。 ++我在語句評估之前遞增i。

2

是的。

i ++是post-increment。它返回i的副本,然後遞增i的值。

++ i是預增量。它遞增我然後返回我的價值。

+3

等待等待。沒有指定順序(這是許多新手出錯的地方,並開始相信某些C++表達式在實踐中必須具有明確定義的效果)。由於「++」在(後)「i」之後,i ++是後增量的;它會遞增「i」的值並返回「i」的原始值,順序不特定。 :-)我知道,當你想到如何將它作爲一項任務時,這聽起來可能很瘋狂。你需要考慮的是編譯器如何在寄存器中保存值並重用它們。 – 2010-10-15 03:51:16

+0

@Alf P. Steinbach:我的意思是說你的觀點沒有實際效果,除非你正在做一些線程不安全的事情?或者可以在單線程環境中以某種方式出現? – 2010-10-15 03:56:32

+1

@斯科特:不對1,對第二。考慮'++ x = 42'。當考慮預先增量作爲第一次增量,然後產生對x的引用時,這怎麼會產生任何東西,但是x被設置爲42?然而,它在C++ 98中是正式的UB,因爲它在序列點之間修改了兩次x。它與允許編譯器假定最多隻有一次x的變化有關,並且x不會被修改和使用,所以它可以在寄存器中執行任何操作,而不用擔心最終的值, (「正確」或「錯誤」),它可以在完整表達式的最後存儲到mem。 – 2010-10-15 05:22:09

1

++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