2008-02-22

Effective C++ イントロダクション

イントロダクションからいきなり知らなかった事ばかり!!
いくらなんでもここまで自分の無知を晒すのはどうかと思いながらも

どうせ誰も見てないし、自分のメモとして残してるだけですから

自分の思いこみで間違った事を書いたとしても何の問題もない!!
と言い訳しながら書いています。

まず解っていなかったのは、宣言と定義があると言う事実。
今まで明確に意識してませんでしたが、何となく納得です。
だからローカルでない静的オブジェクトは定義側にも必要だったんですね。
だから初期値は定義側に書くんですね(違う物もあるけど)。

次に解っていなかったのは、explicit指定子。
コンストラクタにのみ指定可能で、コレを付けると暗黙の型変換が行われなくなるそうな。
例えば、コレを付けないと
class Hoge {
public:
Hoge( int arg );
}

のようなクラスがあったとして
Hoge foo = 100;

と書くと
Hoge foo = Hoge( 100 );

と解釈されるそうな。
当然、意図しない動作になる可能性があるため、特に理由がない限りexplicitを付けるべきとの事。
私としてはこんな暗黙の型変換は気持ち悪くて仕方ないので今度からは機会があれば付けようと思います。

さあ、まだまだ続きます。本当に半年間もC++でコード書いていたのが信じられませんが…
コピーコンストラクタとコピー代入演算子が自動的に生成される
事を知りませんでした。…なんだか

無知っていうレベルじゃねぇぞ!

って感じです。だんだん落ち込んできましたorz

最後に「未定義な動作」についてですが、私は甘く見ていたようです。

…ここまで読んだだけでも、何故C++を使わなければならないのか疑問に思えてきました。
記述に対する動作を正しく理解して、正しく書かないとまともに動かない言語。
未定義な動作が紛れ込むリスクを冒すくらいならReal-Time Java使えばいいじゃない?と思のは理解が浅いが故なのでしょうか?

言語としてスレッドの概念がないなら尚更って思いますが…
でもUNIXはCで書かれてるんだよなぁ(?_?)


0 件のコメント: