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