++運算子是大家都再熟悉不過的東西了,無論是在for迴圈裡,還是在一些賦值語句中,都有++的身影。這裡我和大家分享一下我對++的理解,若有不足之處歡迎批評指正啊。首先,看這樣一段**:
雖然加號多的讓人有點想吐,但還是有規律可循的。錯誤中出現了l-value(左值),那我們先弄清楚什麼是左值吧。
左值是可以寫在=號左邊的表示式,必須是乙個非const的變數。
右值是可以寫在=號右邊的表示式,可以是乙個常量,乙個字面數字,或者說乙個任意的可以求值的表示式。乙個可以作為左值的表示式,同時也是可以作為右值使用的。
原來,問題的根源就是對右值進行了左值操作(賦值,++等)。對於i++++,i++是右值,所以i++++是對右值進行了++操作,所以錯誤。而++++i是對++i(左值)進行++操作,所以執行成功。++i=10;和i++=10;的問題就顯而易見了。問題到這裡還沒結束,接下來我們分析一下為什麼i++是右值,而++i是左值。實際上,i++等價於i=i+1,i。而i++等價於tmp=i,i=i+1,tmp,其中tmp是由編譯器產生的乙個臨時變數。而臨時變數只能作為右值使用,例如函式的返回值一般就是乙個臨時變數。
再談一下++i和i++的效率問題,很顯然,++i的效率要高於i++,因為i++產生了乙個臨時變數tmp。所以,下次我們可以優化一下我們的程式了。
例如,將for(int i=0;i對於c++過載++運算子時,也需要注意++運算子的特性。例如:
前置 和後置 過載
1 前置 過載時沒有引數 而後置 過載時有引數。不會使用其引數,僅僅是區分用。可以理解為前置 後面有引數了,所以不需要引數 i 對應 operator i 對應 operator int 2 前置 需要返回引用 因為過載自加運算子後可以返回物件的引用,以方便在表示式中連續使用。而後置 返回的不是引用...
前置 和後置 的區別
includeusing namespace std class int int const int operator int int operator private int m i ostream operator ostream os,const int i 可以使用 a而此時不能使用a 後置...
前置 和後置 的區別
a表示取a的位址,增加它的內容,然後把值放在暫存器中 a 表示取a的位址,把它的值裝入暫存器,然後增加記憶體中的a的值 前置 和後置 有4點不同 返回型別不同 形參不同 不同 效率不同 1 返回型別 前置 的返回型別是 後置 的返回型別const值。這意味著,前置 返回的是左值 可以被修改,也就是說...