Поделиться через


CString Передача аргументов

В этой статье объясняется, как передавать CString объекты в функции и как возвращать CString объекты из функций.

CString Соглашения о передаче аргументов

При определении интерфейса класса необходимо определить соглашение о передаче аргументов для функций-членов. Существуют некоторые стандартные правила передачи CString и возврата объектов. Если следовать правилам, описанным в разделе "Строки как входные данные функции" и "Строки" в качестве выходных данных функций, вы будете иметь эффективный, правильный код.

Строки в качестве входных данных функции

Самый эффективный и безопасный способ использования объекта в вызываемой CString функции — передать CString объект в функцию. Несмотря на имя, CString объект не сохраняет строку внутри себя как строку в стиле C, которая имеет NULL терминатор. Вместо этого CString объект тщательно отслеживает количество символов, которые у него есть. Если CString указать указатель на NULLстроку с завершением, это небольшая работа, которая может стать значительнойLPCTSTR, если код должен выполнять его постоянно. Результат является временным, так как любое изменение CString содержимого LPCTSTR делает недействительными старые копии указателя.

В некоторых случаях имеет смысл предоставить строку в стиле C. Например, может возникнуть ситуация, когда вызываемая функция записывается в C и не поддерживает объекты. В этом случае принудительная CString к параметру LPCTSTR, а функция получит строку в стиле NULLC. Вы также можете перейти в другое направление и создать CString объект с помощью конструктора CString , который принимает параметр строки в стиле C.

Если содержимое строки должно быть изменено функцией, объявите параметр как неконстантную 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)