Seesaaブログから引っ越した。洗練されたものを目指します。class.いろんなニュース・グループで、同じような慷慨が見られる。CStringのかわりに、標準文字列クラスをつかったときの話題だ。プログラマはよく、プロプラエタリ・ノンポータブルな解よりもスタンダード・ポータブルな解のほうがよいものとする。CStringクラスの特殊な関数を使ってしまっていることに気づくのだ。things:このことは彼らが思っているほど悪くない。3つの例外を除いてCStringのすべての操作をサポートしている。page.��つの例外のうち2つ(ホワイト・スペースのトリミングとケース・コンバージョン)は、造作もなく実装できる。実際、このページでも扱っている。タイプのフォーマットを可能にする。ライブラリは、form()とよばれる関数を持っていた。これは同じことをするものだった。現在の標準の解としては、stringstreamクラスを使えばいい。これらはiostream階層とstringクラスのブリッジであり、通常のstreamをシームレスに操作する。stringstreamは、iostreamクラス階層から継承されているからである。message:CStringの深刻な問題は、メモリ・アロケーションの設計バグである。プアなパフォーマンスとなる一般的なプログラミング・エラーの影響をうける。O(n^2)であって、O(n)ではない。理由は、ループ中毎回+=演算子がメモリの再アロケーションと既存の文字列のコピーをおこなうからだ。Microsoftのアプリケーションはこの類の問題に満ちている(線形時間で解ける問題が��乗オーダの性能)--ただ一方でこれは感謝すべきなんだ。ハイ・エンドのix86ハードウェアの巨大市場を創出しているんだからね(笑)。標準stringクラスを比較するにあたり、他にもいくつか気に止めておくべきことを明らかにしている。変換するときに問題となるかもしれない。ソース・コードを配布している(ファイルはMFC\SRC\Str{core,ex}.cpp)。自前でアロケーション・バグを修正し、リビルドすることができる。VC++6.0のCStringは、バグが修正されているように見える。サービス・パックでかもしれないが。実装者が正しくやれば。実装者は、これを正しく実装している。他のベンダは、そうでないかもしれない。使われているが、stringクラスはそうではない。あり、かつ一切リファレンス・カウントをしていない。