C++ 自增、自減運(yùn)算符的重載和性能分析
— 1 —
重載的形式
a++ // 后置自增運(yùn)算符++a // 前置自增運(yùn)算符b-- // 后置自減運(yùn)算符--b // 前置自減運(yùn)算符
為了區(qū)分所重載的是「前置」運(yùn)算符還是「后置」運(yùn)算符,C++規(guī)定:
「前置」運(yùn)算符作為一元運(yùn)算符重載,重載為成員函數(shù)的形式如下:
// 前置自增運(yùn)算符的重載函數(shù),函數(shù)參數(shù)是空T & operator++();// 前置自減運(yùn)算符的重載函數(shù),函數(shù)參數(shù)是空T & operator--();
「后置」運(yùn)算符作為二元運(yùn)算符重載,多寫(xiě)一個(gè)沒(méi)用的參數(shù),重載為成員函數(shù)的形式如下:
// 后置自增運(yùn)算符的重載函數(shù),多一個(gè)沒(méi)用的參數(shù)T operator++(int);// 后置自減運(yùn)算符的重載函數(shù),多一個(gè)沒(méi)用的參數(shù)T operator--(int);
— 2 —
返回值的討論
| 前置運(yùn)算符重載的成員函數(shù) | 后置運(yùn)算符重載的成員函數(shù) |
|---|---|
| T & operator++(); | T operator++(int); |
| T & operator--(); | T operator--(int); |
注意到區(qū)別了嗎?那么問(wèn)題來(lái)了:
為什么「前置」運(yùn)算符返回的是引用 & ?
為什么「后置」運(yùn)算符返回的是普通的對(duì)象(臨時(shí)對(duì)象)?
前置運(yùn)算符的特性
int a = 0// (++a) = 5;// 可以拆解成:// 1. a = a + 1;// 2. a = 5;(++a) = 5; // 前置++
后置運(yùn)算符的特性
而后置運(yùn)算符,是不能作為左值的,也就是 (a++) = 5; 是不成立的,所以后置運(yùn)算符的重載函數(shù)的返回值就是普通的對(duì)象。
— 3 —
重載函數(shù)的編寫(xiě)
int main(){CDemo d(10);cout << d++ << ","; // 等價(jià)于 d.operator++(0);cout << d << ",";cout << ++d << ","; // 等價(jià)于 d.operator++();cout << d << ",";cout << d-- << ","; // 等價(jià)于 d.operator--(0);cout << d << ",";cout << --d << ","; // 等價(jià)于 d.operator--();cout << d << endl;return 0;}
10,11,12,1212,11,10,10
— 4 —
性能比較
-
先要產(chǎn)生一個(gè)臨時(shí)對(duì)象來(lái)保存未自增或自減前的對(duì)象; -
接著成員變量自增或自減; -
最后返回修改前的對(duì)象(臨時(shí)對(duì)象);
-
成員變量自增或自減; -
返回對(duì)象引用;
小林coding
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!





