2011-09-09 5 views
6

接頭辞単項演算子が ""(§13.5.1[over.unary]/1)のパラメータを持たない非メンバ関数によって実装された ""である場合、任意のメンバー/非メンバー機能の選択肢に適用される通常のカプセル化/コード再利用設計の根拠以外の違いはありますか?単項マイナスオーバーロード:メンバーまたは非メンバーですか?

バイナリ演算子の場合、there's a semantic differenceは、非メンバーが左辺オペランドの暗黙的な変換を許可するためです。単項演算子のようなものはないようですが、標準では、の単項否定演算子を非メンバー(§26.4.6[complex.ops])として定義していますが、std::valarrayのものとstd::durationのもの単項否定演算子はメンバです(§26.6.2.6[valarray.unary]、§20.11.5.3[time.duration.arithmetic])。ニュアンスはありますか?

+1

標準の特定のセクションを引用するとき、あなたが参照しているバージョンを言及したいかもしれません。 –

+0

@AndréCaron n3290バージョンのC++ 11から引用したので、私は 'duration'を立ち上げることができました。 – Cubbi

答えて

2

私が知っている限り、非演算子関数がメンバであるか非メンバであるべきかを決定するのと比較して違いはありません。明らかに、標準のアルゴリズムのように、可能であれば非メンバーでもなく、友人でもない方が好きです。

0

可能であればメンバーを使用することは、友人と狂っている必要がないため、より意味があります。しかしそれ以外の場合は、単なるコードスタイルの決定です。

+1

Sutter/Alexandrescuの新しい年齢ガイドラインは、可能であればnonmember nonfriendを作ることについてどうですか? – Cubbi

+0

@Cubbiはい、可能な限り少ないアクセス権を与えるのが最善ですが、私はコードを簡潔にする方が好きです。 –

関連する問題