以下操作後m的值是多少?
int m = 1;
m = m++;
根據很多書中介紹,後置++運算子的實現是用乙個區域性變數儲存臨時值,用來返回。那麼我們可以假設int型後置++運算子的實現類似
const
int operator++(int)
那麼m=m++;
最後就是
m = temp;
因為m 先被加一,後來又被復原會m。
但是在vc6中測試的結果是m等於2。
看彙編後發現。
m 先被m附值,然後被加一。
0040d4bd mov eax,dword ptr [ebp-14h]
0040d4c0 mov dword ptr [ebp-14h],eax
0040d4c3 mov ecx,dword ptr [ebp-14h]
0040d4c6 add ecx,1
0040d4c9 mov dword ptr [ebp-14h],ecx
這點在其他的編譯器是沒有問題的。
過載前置 運算子和後置 運算子
運算子過載的主要目的是為了讓使用者自定義型別物件可以像普通資料型別一樣能夠進行加減乘除,自加自減等操作,非常直觀方便。在這裡總結一下c 的 分前置與後置 運算子的過載。自減運算子同理。關鍵就是如何通知編譯器,讓它知道哪個是前置版本,哪個是後置版本。如何讓編譯器知道是前置還是後置呢?其實很簡單,只要在...
過載運算子 前置 和後置
1 為區別前置和後置運算子,需要在後置運算子函式中加引數 int 雖然這個型別在此除了以示區別之外並不代表任何實際含義 2 前置返回的是變數的引用,後置返回的是常量。所以 c合法,而c 不合法,這一點可以在vc 6.0和dev c 中採用基本資料型別的 操作來驗證 3 為什麼不讓c 也合法呢?如果要...
(運算子) 運算子
運算子既可作為一元運算子也可作為二元運算子。備註 unsafe context data guid 00bf87717d88a9fac1afadb796c675da 一元 運算子返回運算元的位址 要求 unsafe 上下文 bool data guid 9efd189df2cfb88799dca08...