2007-04-24 (火)
*オーバーロードと「0」の罠
C++で昔作ったクラスを流用して使ってたのですが,とあるメンバの引数に「0」を入れたときだけ,コンパイルが通らない.メンバ関数がオーバーロードされてて,片方はポインタ,もう片方はlongを取るようになっていた.「0」をポインタの NULL と long のどちらに変換して良いか分からないのが原因らしい.「0」だけ暗黙のキャスト時の扱いが違うのは便利なようで,罠もあるっぽい.とりあえず,「0L」とサフィックスをつけて凌ごう.
というか,ポインタを取る方は private なメンバ関数で,存在も忘れていた.private なメンバなんだから外から呼ぶ時には無視して欲しい.