C 40 前置操作符和後置操作符

2021-09-13 02:26:05 字數 2429 閱讀 4376

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