26

CStrings異なる宣言を使用しているコードが表示されるのはなぜですか。

この形式を使用するものもあります

char a_c_string [];

他の人が使用している間

CString another_c_string;

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

4

3 に答える 3

41

CStringCタイプでもC++タイプでもありません。これは、本質的に次の代替手段であるMicrosoftの発明std::stringのようです。

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

私はそれを無視することをお勧めします、それで:

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

これは、 Microsoft Visual C ++でプログラミングしている場合にのみ使用できますが、これにはかなりの制限があります。

于 2013-01-23T06:30:03.560 に答える
28

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

于 2013-01-23T06:42:45.727 に答える
13

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

于 2013-01-23T06:33:36.707 に答える