2011-09-13 65 views
7
cout<<(x++)++; //fails 
cout<<++(++x); //passes 

爲什麼後增量失敗?我看到它發生,但不確定的技術原因。後增量運算符++

+2

post-incrementing臨時? – Benoit

+0

'x'的類型是什麼?這很重要。如果它是內置的,'operator ++'不是函數調用。 – MSalters

+0

它的內置說,int x = 5; – user835194

回答

13

x++返回一個右值,所以你不能再次執行++。另一方面,++x返回左值,因此您可以對其執行++

+1

也看到[這個問題](http://stackoverflow.com/questions/371503/why-is-i-considered-an-l-value-but-i-is-not) – Benoit

4

這就是增量操作符在C/C++中的工作方式。

如果你把++變量(後綴遞增)之後,整個表達式的計算結果爲變量前值遞增。

如果將++放在變量(前綴增量)之前,則表達式求值爲增量操作後的值。

儘管前綴操作返回對傳遞變量的引用,但後綴版本返回的臨時值不得增加。

1

正確。喲不能在Rvalue上執行++。關於右值如何工作的一個很好的解釋是here