CString の基本操作
このトピックでは、次の CString の基本操作について説明します。
Class CString
は、クラス テンプレートの CStringT クラスに基づいています。 CString
は CStringT
の typedef
です。 より正確には、CString
は CStringT
の "明示的な特殊化" の typedef
です。これは、クラスを定義するためにクラス テンプレートを使う一般的な方法です。 同様に定義されるクラスは CStringA
と CStringW
です。
CString
、CStringA
、CStringW
は atlstr.h で定義されています。 CStringT
は cstringt.h で定義されています。
CString
、CStringA
、CStringW
はそれぞれ、サポートする文字列データに使うために 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
の == 演算子は等価です。 Compare
、operator==、CompareNoCase
は MBCS と Unicode に対応しており、CompareNoCase
も大文字と小文字が区別されません。 CString
の Collate
メソッドはロケールに依存しており、多くの場合、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;
キャストを使わない場合、cs
は void*
として扱われ、wcout
によってオブジェクトのアドレスが出力されます。 この動作は、テンプレート引数の推論とオーバーロードの解決の間の微妙な相互作用によって生じますが、それ自体は正しく、C++ 標準に準拠しています。
関連項目
文字列 (ATL/MFC)
CStringT クラス
クラス テンプレートの部分的特殊化
方法: さまざまな文字列型間で変換する