很久以前(八十年代),沒有辦法區(qū)分++和--操作符的前綴與后綴調(diào)用。這個問題遭到程序員的報怨,于是C++語言得到了擴展,允許重載increment 和 decrement操作符的兩種形式。
然而有一個句法上的問題,重載函數(shù)間的區(qū)別決定于它們的參數(shù)類型上的差異,但是不論是increment或decrement的前綴還是后綴都只有一個參數(shù)。為了解決這個語言問題,C++規(guī)定后綴形式有一個int類型參數(shù),當函數(shù)被調(diào)用時,編譯器傳遞一個0做為int參數(shù)的值給該函數(shù):
class UPInt { // "unlimited precision int"
public:
UPInt& operator++(); // ++ 前綴
const UPInt operator++(int); // ++ 后綴
UPInt& operator--(); // -- 前綴
const UPInt operator--(int); // -- 后綴
UPInt& operator+=(int); // += 操作符,UPInts
// 與ints 相運算
...
};
UPInt i;
++i; // 調(diào)用 i.operator++();
i++; // 調(diào)用 i.operator++(0);
--i; // 調(diào)用 i.operator--();
i--; // 調(diào)用 i.operator--(0);
這個規(guī)范有一些古怪,不過你會習慣的。而尤其要注意的是這些操作符前綴與后綴形式返回值類型是不同的。前綴形式返回一個引用,后綴形式返回一個const類型。下面我們將討論++操作符的前綴與后綴形式,這些說明也同樣使用與--操作符。
從你開始做C程序員那天開始,你就記住increment的前綴形式有時叫做“增加然后取回”,后綴形式叫做“取回然后增加”。這兩句話非常重要,因為它們是increment前綴與后綴的形式上的規(guī)范。
// 前綴形式:增加然后取回值
UPInt& UPInt::operator++()
{
*this += 1; // 增加
return *this; // 取回值
}
// postfix form: fetch and increment
const UPInt UPInt::operator++(int)
{
UPInt oldValue = *this; // 取回值
++(*this); // 增加
return oldValue; // 返回被取回的值
}
后綴操作符函數(shù)沒有使用它的參數(shù)。它的參數(shù)只是用來區(qū)分前綴與后綴函數(shù)調(diào)用。如果你沒有在函數(shù)里使用參數(shù),許多編譯器會顯示警告信息,很令人討厭。為了避免這些警告信息,一種經(jīng)常使用的方法時省略掉你不想使用的參數(shù)名稱
然而有一個句法上的問題,重載函數(shù)間的區(qū)別決定于它們的參數(shù)類型上的差異,但是不論是increment或decrement的前綴還是后綴都只有一個參數(shù)。為了解決這個語言問題,C++規(guī)定后綴形式有一個int類型參數(shù),當函數(shù)被調(diào)用時,編譯器傳遞一個0做為int參數(shù)的值給該函數(shù):
class UPInt { // "unlimited precision int"
public:
UPInt& operator++(); // ++ 前綴
const UPInt operator++(int); // ++ 后綴
UPInt& operator--(); // -- 前綴
const UPInt operator--(int); // -- 后綴
UPInt& operator+=(int); // += 操作符,UPInts
// 與ints 相運算
...
};
UPInt i;
++i; // 調(diào)用 i.operator++();
i++; // 調(diào)用 i.operator++(0);
--i; // 調(diào)用 i.operator--();
i--; // 調(diào)用 i.operator--(0);
這個規(guī)范有一些古怪,不過你會習慣的。而尤其要注意的是這些操作符前綴與后綴形式返回值類型是不同的。前綴形式返回一個引用,后綴形式返回一個const類型。下面我們將討論++操作符的前綴與后綴形式,這些說明也同樣使用與--操作符。
從你開始做C程序員那天開始,你就記住increment的前綴形式有時叫做“增加然后取回”,后綴形式叫做“取回然后增加”。這兩句話非常重要,因為它們是increment前綴與后綴的形式上的規(guī)范。
// 前綴形式:增加然后取回值
UPInt& UPInt::operator++()
{
*this += 1; // 增加
return *this; // 取回值
}
// postfix form: fetch and increment
const UPInt UPInt::operator++(int)
{
UPInt oldValue = *this; // 取回值
++(*this); // 增加
return oldValue; // 返回被取回的值
}
后綴操作符函數(shù)沒有使用它的參數(shù)。它的參數(shù)只是用來區(qū)分前綴與后綴函數(shù)調(diào)用。如果你沒有在函數(shù)里使用參數(shù),許多編譯器會顯示警告信息,很令人討厭。為了避免這些警告信息,一種經(jīng)常使用的方法時省略掉你不想使用的參數(shù)名稱