06項 インクリメント演算子とデクリメント演算子で前置形式と後置形式とを区別する
インクリメント演算子とデクリメント演算子で前置形式と後置形式とを区別する
前置形式は"operator++()"で、後置形式は"operator++(0)"で呼び出されます。
class MyInt { public: explicit MyInt(int i) : _data(i){} MyInt &operator++(); //前置 const MyInt &operator++(int); //後置 int asInt() const { return _data; } private: int _data; }; MyInt &MyInt::operator++() { _data++; return *this; } const MyInt &MyInt::operator++(int) { MyInt old = *this; ++(*this); return old; }
前置形式の戻り値が非const、後置形式はconstになっているのは、組み込み型の振る舞いと整合性を持たせるためです。
後置形式は内部で一時オブジェクトを作成するため、できる限り前置形式を使うべきです。