void code()
#include using namespace std;
int main()
vc++ 2010 彙編
int i = 0;
0127136e mov dword ptr [i],0
i++;
01271375 mov eax,dword ptr [i]
01271378 add eax,1
0127137b mov dword ptr [i],eax
++i;
0127137e mov eax,dword ptr [i]
01271381 add eax,1
01271384 mov dword ptr [i],eax
g++ 彙編
14 int i = 0;
0804869d: movl $0x0,0x1c(%esp)
16 i++;
080486a5: addl $0x1,0x1c(%esp)
18 ++i;
080486aa: addl $0x1,0x1c(%esp)
對於基礎資料型別,在工程上沒有任何區別。
由於例項中沒有使用返回值,經過編譯器優化後,生成相同的彙編**。
c/c++ 開發的軟體無法完全反編譯思考:++ 操作符可以過載嗎?如何區分前置 ++ 和後置 ++?
#include using namespace std;
class test
int value()
test& operator ++ ()
test operator ++ (int) // 返回值而不是引用
};int main()
輸出:10
11
後置 ++ 操作符過載分析:
test operator ++ (int)
complex.h對於類型別的物件
#ifndef _complex_h_
#define _complex_h_
class complex
;#endif
complex.cpp
#include "complex.h"
#include complex::complex(int a, int b)
int complex::geta()
int complex::getb()
int complex::getmodulus()
complex complex::operator + (const complex& c)
complex complex::operator - (const complex& c)
complex complex::operator * (const complex& c)
complex complex::operator / (const complex& c)
bool complex::operator == (const complex& c)
bool complex::operator != (const complex& c)
// 為了實現迴圈賦值,將自身引用返回
complex& complex::operator = (const complex& c)
return *this;
}complex& complex::operator ++ ()
complex complex::operator ++ (int)
complex& complex::operator -- ()
complex complex::operator -- (int)
main.cpp
#include #include "complex.h"
using namespace std;
int main()
輸出:00
11
40 前置操作符和後置操作符
下面的 有區別嗎?進入彙編 i i 的值作為返回值,i自增1 i i自增1,i的值作為返回值 include include using namespace std int main int value test operator 過載前置 操作符 test operator int 過載後置 操作...
40 前置操作符和後置操作符
注 部落格中內容主要來自 狄泰軟體學院 部落格僅當私人筆記使用。測試環境 ubuntu 10.10 gcc版本 9.2.0 一 值得思考的問題 1 下面的 有沒有區別?為什麼?i i 的值作為返回值,i自增1。i i自增1,i的值作為返回值test.cpp include using namespa...
前置操作符和後置操作符
操作符可以被過載 全域性函式和成員函式均可以進行過載 過載前置 操作符不需要額外的引數 過載後置 操作符需要乙個int型別的佔位引數 來看乙個例子 include include using namespace std class test intvalue test operator test o...