Blogプログラミング・IT関連。知っていると便利なこと、気になって調査したこと、はまったけど解決できたことなど。if文でポインタがNULLかどうかの判定をするコードのc++言語上の解釈についてポインタが実体を指しているか、それともNULLか、という判定をして処理を分岐することがよくあります。operation.}よく見るのは上記のようなコードです。NULLとの比較で分岐するのでなく、NULLが0であることを期待した以下のようなコードを見かけることがあります。ポインタではなく、オブジェクトの実体だった場合に何が起こるのか?という疑問に勝手に応えたいと思います。0;}上記のコードをコンパイルするとエラーになります。‘bool’まあそうですよね。ここからやっと本題に入りますが、上記のif文をエラーでなくSampleClassの内部状態に応じて、分岐させることが可能です。具体的にどうすればよいか?答えは「キャスト演算子をオーバーロードする」ことです。上記のように定義して、bool型へのキャスト演算子を定義するとコンパイルができるようになり、メンバ変数の"a"の値に応じて処理が分岐されるようになります。この例ではbool型へのキャスト演算子を定義しましたが、int型やvoid*型へのキャスト演算子の定義でも所望の動作をさせることができます。これは暗黙的型変換によってintもしくはvoid*がboolに変換された上でif文で評価されるためです。実際、stlのiosやbasic_iosではboolではなく、void*へのキャスト演算子が定義されているようです。