後置式演算子のオーバーロードについて
Posted: 2011年8月06日(土) 20:26
http://www.geocities.jp/ky_webid/cpp/language/017.html
上記の解説サイトの下の方に前置式・後置式 演算子のオーバーロードについての下記のような解説が書かれています。
なぜ後置式の場合は古いデータを返さなければならないのでしょうか?
上記の解説サイトの下の方に前置式・後置式 演算子のオーバーロードについての下記のような解説が書かれています。
class CData{
public:
CData& operator++(); // 前置
CData operator++(int); // 後置(引数の int は後置式であることを示すダミー)
private:
int m_data;
};
CData& CData::operator++()
{
// 前置式なので、インクリメントを行ってから return
m_data += 1;
return *this;
}
CData CData::operator++(int)
{
// 後置式なので、古い状態をローカル変数にコピーしておき、インクリメントする。
// その後で、古い方を返す。
CData tmp = *this;
m_data += 1;
return tmp;
}