CString 引数の受け渡し

この記事では、CString オブジェクトを関数に渡す方法と関数から CString オブジェクトを返す方法について説明します。

CString 引数渡し規約

クラス インターフェイスを定義する場合は、メンバー関数の引数渡し規約を決定する必要があります。 CString オブジェクトを受け渡しするための標準的なルールがいくつかあります。 「関数の入力としての文字列」と「関数の出力としての文字列」に記載されているルールに従うと、効率的で正しいコードが得られます。

関数の入力としての文字列

呼び出された関数で CString オブジェクトを使用する最も効率的で安全な方法は、CString オブジェクトを関数に渡すことです。 名前にかかわらず、CString オブジェクトには、NULL 終端文字を持つ C スタイルの文字列として内部的に文字列が格納されることはありません。 代わりに、CString オブジェクトは、その文字数を注意深く追跡します。 終了した文字列へのNULLポインターを指定LPCTSTRすることはCString、コードが絶えず実行する必要がある場合に重要になる可能性のある少量の作業です。 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")));

関連項目

文字列 (ATL/MFC)