CString
引数の受け渡し
この記事では、CString
オブジェクトを関数に渡す方法と関数から CString
オブジェクトを返す方法について説明します。
CString
引数渡し規約
クラス インターフェイスを定義する場合は、メンバー関数の引数渡し規約を決定する必要があります。 CString
オブジェクトを受け渡しするための標準的なルールがいくつかあります。 「関数の入力としての文字列」と「関数の出力としての文字列」に記載されているルールに従うと、効率的で正しいコードが得られます。
関数の入力としての文字列
呼び出された関数で CString
オブジェクトを使用する最も効率的で安全な方法は、CString
オブジェクトを関数に渡すことです。 名前にかかわらず、CString
オブジェクトには、NULL
終端文字を持つ C スタイルの文字列として内部的に文字列が格納されることはありません。 代わりに、CString
オブジェクトは、その文字数を注意深く追跡します。 CString
NULL
終了文字列へのLPCTSTR
ポインターを提供することは、コードが常に実行する必要がある場合に重要になる可能性がある少量の作業です。 CString
の内容を変更すると、LPCTSTR
ポインターの古いコピーが無効になるため、結果は一時的になります。
C スタイルの文字列を提供する場合には意味があります。 たとえば、呼び出された関数が C で記述され、オブジェクトをサポートしていない状況が発生する場合があります。 この場合、CString
パラメーターは LPCTSTR
に強制的に適用され、関数は C スタイルの NULL
終端文字列を取得します。 また、C スタイルの文字列パラメーターを受け取る CString
コンストラクターを使用して、他の方向に移動したり、CString
オブジェクトを作成したりすることもできます。
文字列の内容が関数によって変更される場合は、パラメーターを非定数 CString
参照 (CString&
) として宣言します。
関数の出力としての文字列
通常、CString
オブジェクトは関数から返すことができます。これは、CString
オブジェクトがプリミティブ型などの値のセマンティクスに従うためです。 読み取り専用の文字列を返すには、定数 CString
参照 (const CString&
) を使用します。 次の例は、CString
パラメーターと戻り値の型の使用方法を示しています。
class CName : public CObject
{
private:
CString m_firstName;
TCHAR m_middleInit;
CString m_lastName;
public:
CName() {}
void SetData(LPCTSTR fn, const TCHAR mi, LPCTSTR ln)
{
m_firstName = fn;
m_middleInit = mi;
m_lastName = ln;
}
void GetData(CString& cfn, TCHAR& mi, CString& cln)
{
cfn = m_firstName;
mi = m_middleInit;
cln = m_lastName;
}
CString GetLastName()
{
return m_lastName;
}
};
CName name;
CString last, first;
TCHAR middle;
name.SetData(_T("John"), 'Q', _T("Public"));
ASSERT(name.GetLastName() == _T("Public"));
name.GetData(first, middle, last);
ASSERT((first == _T("John")) && (last == _T("Public")));