07項 &&, ||, , をオーバーロードしない

&&, ||, , をオーバーロードしない


&&演算子、||演算子について

昔書いた記事にまとめてありました。
論理積"a && b"は、"aが真ならばbを評価結果とし、aが偽ならbを無視して偽を評価結果とする"と振る舞います。
&&をオーバーロードしてしまうと、"a && b"は
a.operator(b) または、
operator(a, b) とみなされます。
関数の引数の評価順序は不定なので、振る舞いが不整合になります。

論理和 a || b は、"aが真ならばbを無視して真を評価結果とし、aが偽ならbを評価結果とする"と振舞うので、&&演算子と似たような問題が起こります。


,(コンマ)演算子

"expr1, expr2"は、"expr1を評価した後expr2を評価し、expr2を戻り値とする"という振る舞いをします。
コンマ演算子も評価順序が決められているため、&&,||演算子と同じくオーバーロードしてはいけません。