演算子のオーバーロードで気づいた点、注意点を備忘録的に列挙。
全体的
引数の名前は lhs と rhs(left (right) hand side / 左(右)辺値)を使う。
#この名前がどこまで一般的なのかは知らない。
代入演算子
1, 宣言
代入演算子の宣言は以下とする。
クラス名& operator = ( const クラス名& rhs )
注意点は戻り値で、int 型の場合に (a = b) = c; が有効であることから、代入演算子の戻り値は "const クラス名&" ではなく、 "クラス名&" となる。
2, 自己代入
自分自身が左辺値となってもよいように、自己代入に対するガードを記述する。
例:
クラス t; t = t;
ガード:
クラス& operator = ( const クラス& rhs ) { if ( this == &rhs ) { return *this; // なにもしない } }