エンジニアのソフトウェア的愛情

または私は如何にして心配するのを止めてプログラムを・愛する・ようになったか

2009-06-01から1ヶ月間の記事一覧

初期化リストの途中で例外が発生したときの振る舞い

C++

コンストラクタの初期化リストの途中で例外が発生した場合、どんな振る舞いになるのか気になったのでためしてみました。 #include <iostream> #include <stdexcept> class Foo { public: explicit Foo(int id, bool bad = false) : id(id) { std::cout << "Foo::Foo(" << id << ")</stdexcept></iostream>…

情報に手を伸ばす距離

Leopardはじめました。それから一週間が経ちました。もうすぐ次期バージョンがでるというときにレビューもないので、Leopardを使って感じたことを。 Tigerからアップグレードした直後はこれといって代わり映えしない感じがしたんですが、触っているうちに今…

定数マップに関する考察

C++

QuickSortから始まってここまできましたが、なにをしたかったかというと、ダブルディスパッチのエントリで書いたように、「ローコストのスタティックなしくみ」を実現するための試みでした。C++はライブラリでどうにかするタイプの言語なので、モダンな言語…

定数マップ

C++

昨日のエントリの続き。 ソート済み配列が手に入るとマップが作れます。ソートされていなくても線形検索すればいいんですが、それはそれ、効率よく検索したいじゃないですか。ソート済みなら二分探索ができるので、二分探索で実装した定数マップです。 以下…

ソート済みの定数配列

C++

後から拡張もせず、参照するだけなので定数配列で充分なんだけど、要素はソートされていてほしい…というときのために。 本当はコンパイル時に要素がソートされるといいんですが、思いつかなかったので次善の策として。 2009/06/16 訂正:operator []がconstに…

コンストラクタ/デストラクタ内での仮想関数の振る舞い

C++

デストラクタからオーバーライドされた仮想関数が呼べない - imHoリンク先のページにもあるように、C++ではでは構築時には先に派生元が構築され、破棄時には派生元が後に破棄されます。つまり、派生元のコンストラクタ/デストラクタが動いているときは派生先…

デスマーチ

目の前の――あるいは長期にわたる経験から学ばない指揮官は、無駄な死がいずれは勝利につながるとでもいうように、やみくもに戦力を投入しつづけるのです はからずしも望まぬ司令官になってしまった主人公の話「彷徨える艦隊」の第2巻での、その主人公のセリ…

Leopardはじめました

周回遅れでiBookにLeopardを入れました。本当はこの秋にでるSnow Leopardまでいまの環境で引っ張りつもりだったんですが、Snow LeopardがPowerPCをサポートしないと知り(手持ちのiBookはPowerPCマシン)、観念してLeopardを購入。丸一日かけてLeopardの環境に…

QuickSortの実装・補遺

少し整理。あとポインタだけでなく、イテレータ(ランダムアクセスイテレータ)でも使えるように記述を少し変更。 template<typename T> void swap(T& lhs, T& rhs) { T temp(lhs); lhs = rhs; rhs = temp; } template<typename iterator_t> void qsort(iterator_t begin, iterator_t end) { if(</typename></typename>…

QuickSortの実装を学習しなおしました

でも、釈然としないのはなぜだろう? template<typename T> void swap(T* lhs, T* rhs) { T temp = *lhs; *lhs = *rhs; *rhs = temp; } template<typename T> void qsort(T* begin, T* end) { if((end - begin) <= 1) return; T* left = begin; T* right = end - 1; T pivot = *right;</typename></typename>…

QuickSortの実装を忘れた…

わけあって、ソートのプログラムを書こうとしたんですが。 あれ、C/C++でどうやって実装するんだっけ?こことか読んで、勉強のしなおしが必要です。 Haskellならやりたいことをそのまま書き連ねるだけなので楽でいいのに…。 qsort [] = [] qsort (a:as) = (qs…

もっとエキスパートがいてもいいんじゃないだろうか

このところ、他のチームのソースコードを入手して、時間があるときに眺めているのですが。「ここのチームのコードはきれいだっ」というのにお目にかかれず。どちらかというと、「なんだこれは?」というコードを目にすることもすくなくなく。だからといって自…