現在MFCの勉強中です。
MFCでは文字列は何を使えばいいのですか?
CString、char、LPCTSTRなどなど。
どれがどういう場合、適しているなど、教えていただけ
ないでしょうか。
charに比べて、CStringは遅いなど、あるんですか?
やっぱり、UNICODEのことを考えてcharは
使わないほうがいいとか。
よろしくお願いします。
あなたの好みと要求仕様とAPIの制限です。
unicodeを気にするのなら、char の代わりに TCHAR を使いましょう。
コンパイル時に解決してくれます。
文字定数/文字列定数には _T() を使います。
詳しくはMSDN参照。
定数文字列 -> _T(定数文字列)
'a' -> _T('a')
LPCTSTR は、σ(^^)の環境では、cpnst char * です。
Long Pointer Const T STRing と読んじゃいます。
CString はクラスなので、遅いです。でも便利です。
実装は、MFCのソースコードを見れば分かるでしょう。
なければ、追加インストールしましょう。(CD-ROMに同梱されています)
うまくつかえば、ある程度スピードはカバーできます。
> σ(^^)の環境
Windows2000/VC++6.0sp5pro/SDK-may2002/ATL3.0/WTL7.0
既に書かれていますが、
CStringはとても便利です。
単なるツールとかスピードを気にしなくてもいい場合は、
使った方が手間が省ける分開発スピードが上がるのでいいと思います。
最近のハードウエアはパワーがあるのでよっぽどパフォーマンスを要求されるような
物でなければ、CStringを使ってもかまわないと思いますよ。
実際、私もよく使用します。
CStringを使うとメモリの確保とか開放を意識しなくても良いので
スピード勝負でない場合は余計な不具合が起こりにくいので良いかもしれないです。
但し、メモリの管理はCStringが行っているのでCStringのメンバー関数を使う分には
問題がありませんが、Cの標準関数やAPIに渡すようなときは注意が必要です。
メモリの管理をCStringが行っていることを忘れなければ、大丈夫です。
スピード勝負の場合はCStringはお勧めできません。
きちんと必要なメモリを確保して処理を行うべきだと思います。
TCHARの配列で処理した方が余計なオーバーヘッドがない分早くなります。
これは、CArrayやCListといったテンプレートクラスにも言えることです。
VCでプログラミングする場合は、基本的にTCHARを使った方がいいです。
意識的にcharを使う必要があるときだけcharで処理して
メッセージの表示とか画面に文字を表示するような用途にはTCHARを使う癖を
つけたほうがいいと思います。