ブログ@kaorun55

HoloLensやKinectなどのDepthセンサーを中心に書いています。

演算子のオーバーロードあれこれ

演算子オーバーロードで気づいた点、注意点を備忘録的に列挙。

全体的

引数の名前は 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;     // なにもしない
    }
}

二項演算子

1, 二項演算子メンバ関数よりはグローバル関数のほうが良い(2つのオブジェクトから、新しいオブジェクトを生成するため)。
2, op の実装は op= を使用する。