Udostępnij za pośrednictwem


CString Przekazywanie argumentów

W tym artykule wyjaśniono, jak przekazywać CString obiekty do funkcji i jak zwracać CString obiekty z funkcji.

CString Konwencje przekazywania argumentów

Podczas definiowania interfejsu klasy należy określić konwencję przekazywania argumentów dla funkcji składowych. Istnieją pewne standardowe reguły przekazywania i zwracania CString obiektów. Jeśli przestrzegasz reguł opisanych w artykule Ciągi jako dane wejściowe funkcji i ciągi jako dane wyjściowe funkcji, będziesz mieć wydajny, poprawny kod.

Ciągi jako dane wejściowe funkcji

Najbardziej wydajnym i bezpiecznym sposobem użycia CString obiektu w wywoływanych funkcjach jest przekazanie CString obiektu do funkcji. Pomimo nazwy CString obiekt nie przechowuje ciągu wewnętrznie jako ciąg w stylu C, który ma NULL terminator. CString Zamiast tego obiekt zachowuje staranne śledzenie liczby znaków, które zawiera. Po CString podaniu LPCTSTR wskaźnika do NULL-terminated ciąg jest niewielką ilością pracy, która może stać się znacząca, jeśli kod musi to zrobić stale. Wynik jest tymczasowy, ponieważ każda zmiana CString zawartości unieważnia stare kopie LPCTSTR wskaźnika.

W niektórych przypadkach warto podać ciąg w stylu C. Na przykład może wystąpić sytuacja, w której wywoływana funkcja jest zapisywana w języku C i nie obsługuje obiektów. W takim przypadku przesuń CString parametr na LPCTSTRwartość , a funkcja pobierze ciąg -terminated w stylu NULLjęzyka C. Możesz również przejść w innym kierunku i utworzyć CString obiekt przy użyciu CString konstruktora, który akceptuje parametr ciągu w stylu C.

Jeśli zawartość ciągu ma zostać zmieniona przez funkcję, zadeklaruj parametr jako niekonstantego CString odwołania (CString&).

Ciągi jako dane wyjściowe funkcji

Zazwyczaj można zwracać CString obiekty z funkcji, ponieważ CString obiekty są zgodne z semantykami wartości, takimi jak typy pierwotne. Aby zwrócić ciąg tylko do odczytu, użyj odwołania stałego CString (const CString&). Poniższy przykład ilustruje użycie parametrów i typów zwracanych 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")));

Zobacz też

Ciągi (ATL/MFC)