CString の基本操作

このトピックでは、次の CString の基本操作について説明します。

Class CString は、クラス テンプレートの CStringT クラスに基づいています。 CStringCStringTtypedef です。 より正確には、CStringCStringT の "明示的な特殊化" の typedef です。これは、クラスを定義するためにクラス テンプレートを使う一般的な方法です。 同様に定義されるクラスは CStringACStringW です。

CStringCStringACStringW は atlstr.h で定義されています。 CStringT は cstringt.h で定義されています。

CStringCStringACStringW はそれぞれ、サポートする文字列データに使うために CStringT で定義されたメソッドと演算子のセットを取得します。 これらのメソッドの中には、C ランタイム ライブラリの文字列サービスと重複するものや、場合によってはそれを上回るものもあります。

注: CString はネイティブ クラスです。 C++/CLI マネージド プロジェクトで使う文字列クラスには、System.String を使います。

標準 C リテラル文字列からの CString オブジェクトの作成

ある CString オブジェクトを別のオブジェクトに割り当てる場合と同じように、CString に C スタイルのリテラル文字列を割り当てることができます。

  • C リテラル文字列の値を CString オブジェクトに割り当てます。

    CString myString = _T("This is a test");   
    
  • ある CString の値を別の CString オブジェクトに割り当てます。

    CString oldString = _T("This is a test");
    CString newString = oldString;
    

    CString オブジェクトの内容は、ある CString オブジェクトが別のものに割り当てられたときにコピーされます。 そのため、文字列を構成する実際の文字への参照を 2 つの文字列が共有することはありません。 CString オブジェクトを値として使う方法の詳細については、CString のセマンティクスに関するページを参照してください。

    Note

    Unicode 用または ANSI 用にコンパイルできるようにアプリケーションを記述するには、_T マクロを使ってリテラル文字列をコーディングします。 詳細については、「Unicode とマルチバイト文字セット (MBCS) のサポート」を参照してください。

CString 内の個々の文字へのアクセス

CString オブジェクト内の個々の文字にアクセスするには、GetAt および SetAt メソッドを使います。 また、GetAt ではなく配列要素、添え字、演算子 ([]) を使って個々の文字を取得することもできます (これは、標準の C スタイルの文字列のように、インデックスによって配列要素にアクセスするのと似ています)。文字の CString インデックス値は 0 から始まります。

2 つの CString オブジェクトの連結

2 つの CString オブジェクトを連結するには、次のように連結演算子 (+ または +=) を使います。

CString s1 = _T("This ");        // Cascading concatenation
s1 += _T("is a ");
CString s2 = _T("test");
CString message = s1 + _T("big ") + s2;  
// Message contains "This is a big test".

連結演算子 (+ または +=) の少なくとも 1 つの引数は CString オブジェクトにする必要がありますが、もう 1 つの引数には、定数文字列 (たとえば "big") または char (たとえば 'x') を使用できます。

CString オブジェクトの比較

Compare メソッドと CString の == 演算子は等価です。 Compareoperator==CompareNoCase は MBCS と Unicode に対応しており、CompareNoCase も大文字と小文字が区別されません。 CStringCollate メソッドはロケールに依存しており、多くの場合、Compare よりも低速です。 Collate は、現在のロケールで指定されている並べ替え規則に従う必要がある場合にのみ使ってください。

次の表は、使用できる CString 比較関数と、それに相当する C ランタイム ライブラリ内の Unicode/MBCS 移植可能関数を示しています。

CString 関数 MBCS 関数 Unicode 関数
Compare _mbscmp wcscmp
CompareNoCase _mbsicmp _wcsicmp
Collate _mbscoll wcscoll

CStringT クラス テンプレートには関係演算子 (<、<=、>=、>、==、!=) が定義されており、これらは CString で使用できます。 次の例のように、これらの演算子を使って 2 つの CStrings を比較することができます。

CString s1(_T("Tom"));
CString s2(_T("Jerry"));
ASSERT(s2 < s1);

CString オブジェクトの変換

CString オブジェクトを他の文字列型に変換する方法については、「方法: さまざまな文字列型間で変換する」を参照してください。

CString と wcout の併用

CString を wcout と併用するには、次の例に示すように、オブジェクトを明示的に const wchar_t* にキャストする必要があります。

CString cs("meow");

wcout << (const wchar_t*) cs << endl;

キャストを使わない場合、csvoid* として扱われ、wcout によってオブジェクトのアドレスが出力されます。 この動作は、テンプレート引数の推論とオーバーロードの解決の間の微妙な相互作用によって生じますが、それ自体は正しく、C++ 標準に準拠しています。

関連項目

文字列 (ATL/MFC)
CStringT クラス
クラス テンプレートの部分的特殊化
方法: さまざまな文字列型間で変換する