3

オーバーロードした場合operator bool()。私もオーバーロードする必要がありoperator !()ますか?いつ、なぜ。手伝ってくれてありがとう。

4

1 に答える 1

6

クラスのインスタンスがどこoperator!()にあるかを開発者が判断できるようにする場合も、実装する必要があります。!myobjectmyobject

セクション 13.3.1.2 は、単項演算子をユーザー定義型のオブジェクトに適用する場合

組み込み候補には、13.6 で定義されているすべての候補演算子関数が含まれており、指定された演算子と比較して、

  • 同じオペレーター名を持ち、かつ
  • 同じ数のオペランドを受け入れ、
  • 指定されたオペランドまたはオペランドを 13.3.3.1 に従って変換できるオペランド型を受け入れます。
  • 非テンプレート非メンバー候補と同じパラメータ タイプ リストを持たない。

したがって、コンパイラは組み込みおよびユーザー定義の変換を使用できますが、暗黙的に呼び出し可能な bool operator!(bool)場合のみです。ほとんどの場合、任意の整数コンテキストでの使用を避けるために明示的に作成されます。クリスがコメントで述べたように、複数のユーザー定義の変換は、組み込みの候補演算子の間にあいまいさを生み出す可能性もあります。operator bool()operator bool()

したがって、自分自身を定義するのが最善operator!()です。

于 2012-12-09T01:54:54.427 に答える