C++修行中

特に深い理由もなく(本当はちょっとあるけど、書く程のことでもない)C++の勉強をしている。前に他人のC++ソース(といってもほとんどCのような感じ)を読まなくてはいけないことがあって、少し勉強したもののすこぶる中途半端だったので、再度勉強しはじめたわけだ。で、こないだ作ったBFM(http://members.jcom.home.ne.jp/j-klein/software/bfm/)が処女作だったというわけ。

いろいろ勉強して思ったことは『コーディング規約無しで、適当に書いたら絶対まずいことになる』ということ。当たり前ではあるんだけど、他の言語以上に自由度と破壊力がある。具体的に言うなら『暗黙の◯◯』というのが、深い落し穴の入口に見える。

#include 

class HogeClass {
private:
    int value;
public:
    HogeClass(int val) : value(val) {}
    operator int() const {return value;}
};

int
main(int argc, char *argv[])
{
    HogeClass hogeInstance = 10;

    printf("HogeClass -> %d?n", (int)hogeInstance);

    if (hogeInstance == 10)
        printf("hogeInstance is 10?n");

    return 1;
}

こういうのに馴染めない。さすがに文字列を表すクラスなどは'string str = "hoge";'というのは有りだと思うのだけど、あんまりそれ以外のものを見たくない。Cしか分からない人はHogeClassを構造体だと思えば、気持ち悪さを理解してもらえるかな?

1人で開発する限りはJavaで出来ないことはC++でもやらない方針が良いような気がした。もちろん100%ではないけど、出来る限り明示的なコーディングをすべきだということ。"=="をオーバーロードしたり、暗黙の型変換を利用して、以下の例(1)のようなやりたかをするよりも例(2)のほうが分かりやすいと思うし、間違いが少そう。

// 例(1)
if (instance1 == instance2) { ... }

// 例(2)
if (instance1.equals(instance2)) { ... }

でもね、なぜか燃えるんだよねC++って。書いてて楽しかった(1つしかソフトウェアを書いてないけど)。奥が深い症候群? かもね。