私は自分のために答えることができない質問を横断しました。また、私はこれとGoogleとの両方で答えを見つけられませんでした。オブジェクトが `!obj`の式で使用される` operator! `と` operator bool`の両方を提供するとき?
MyClass myObject;
// [some code, if any]
if (!myObject)
{
// [do something]
}
MyClass
はこのような何かに定義されてみましょう:今
class MyClass
{
public:
MyClass() { };
virtual ~MyClass() { };
bool operator!()
{
return !myBool;
};
operator bool()
{
return myBool;
};
private:
bool myBool = 0;
};
私の質問です:のどちらそうは次のように私は、if節に「有効性のためにオブジェクトをチェック」したい、と言いますオーバーロードされた演算子は実際にこのif節で使用されますか?いずれにしても、結果は明らかに同じです。
私はそれが最も抵抗の少ない道を行くと思うし、 'operator! 'と呼ぶでしょう... – StoryTeller
これを読むまで、ブールのオーバーロードについては考えないでください:http://stackoverflow.com/questions/6242768/is-the-safe-bool-idiom-in-c11 – Bathsheba
はい、 'operator bool'を実行して明示的にしてください。とにかく、 'operator!'は変換を必要としません。 'operator bool'はユーザ定義の変換を必要とします。 – chris