web-dev-qa-db-ja.com

`CString`とは何ですか?

CStringsを使用して宣言されたコードが異なるように見えるのはなぜですか。

一部はこの形式を使用します

char a_c_string [];

他の人が使用している間

CString another_c_string;

違いはありますか? CStringsで見つけたすべての参照は、最初の例で行ったように宣言します。他の方法で人々が例を挙げているフォーラムなどで見ただけです。

18
user1768079

CStringは、C型でもC++型でもありません。 Microsoftの発明のようです これは本質的にstd::stringの代替です:

  • CStringオブジェクトは、連結操作の結果として成長する可能性があります。
  • CStringオブジェクトは「値のセマンティクス」に従います。 CStringオブジェクトは、文字列へのポインターとしてではなく、実際の文字列として考えてください。
  • const char*およびCString関数の引数をLPCTSTRオブジェクトに自由に置き換えることができます。
  • 変換演算子は、読み取り専用の文字配列(Cスタイルの文字列)として文字列の文字に直接アクセスします。

無視することをお勧めします:

(a)人々はあなたが話していることを知っています。
(b)コードは移植可能です。
(c)C++を書いているので、誰もが世界中で受け入れられているISO C++標準に従って合理化することができます。 ある会社のオフィスの部屋にいる数人の男)。

Microsoft Visual C++でプログラミングしている場合にのみ利用できますが、これは実質的に制限されています。

多くのGUIフレームワークには独自の文字列クラスがあります。例えばQTには QString があり、wxWindowsには wxString があります。この場合、MFCにはCStringがあります。 MFC guiコードのコンテキストでCStringを使用すると便利です。VisualC++に既に大きく依存しているため、コードの移植性は想定されていません。それは非標準であるため無視するように言っているブランケットステートメントに注意してください-それはすべてコンテキストに依存します。

22
acraig5075

混乱の原因になっている場合に備えて、「CString」の「C」は、MFCのすべてのクラスが持つプレフィックスにすぎません。 MFCは、Microsoftがwin32 APIをラップするC++ライブラリです。この文字列クラスは、C言語が提供する文字列処理機能を記述するために使用される「C文字列」とはほとんど関係がありません。 C言語は、文字列を表すchar配列へのポインタを操作する文字列処理用の関数のみを提供し、最後の文字がNUL(別名NUL終了またはゼロ終了)であることを要求します。 C++自体にも文字列クラスstd::stringがあることに注意してください(実際、std :: wstringとstd :: basic_stringテンプレートもありますが、初心者としては安全に無視できます)。

9
Ulrich Eckhardt