Question

Dans le fichier d'en-tête de CString (que ce soit les classes Microsoft ou Open Foundation - http: / /www.koders.com/cpp/fid035C2F57DD64DBF54840B7C00EA7105DFDAA0EBD.aspx#L77 ), il y a le fragment de code suivant

struct CStringData
{   
    long nRefs;
    int nDataLength;
    int nAllocLength;
    TCHAR* data() { return (TCHAR*)(&this[1]); };
    ...
};

Qu'est-ce que le (TCHAR *) (et ce [1]) indiquer?

Le struct CStringData est utilisé dans la classe CString (http: // www.koders.com/cpp/fid100CC41B9D5E1056ED98FA36228968320362C4C1.aspx).

Toute aide est appréciée.

Était-ce utile?

La solution

CString a beaucoup de trucs internes qui la font ressembler à une chaîne normale lorsqu'il est passé par exemple à printf fonctions, en dépit d'être en fait une classe - sans avoir à jeter à LPCTSTR dans la liste des arguments, par exemple, dans le cas de varargs (...) par exemple, dans un printf . Ainsi, en essayant de comprendre un truc seule personne ou fonction dans la mise en œuvre de CString mauvaises nouvelles. (La fonction de données est une fonction interne qui reçoit le tampon « réel » associé à la chaîne.)

Il y a un livre, MFC Internes qui en est faite, et IIRC le livre Blaszczak pourrait toucher.

EDIT: En ce qui concerne ce que l'expression se traduit en fait en termes de C ++ brut: -

TCHAR* data() { return (TCHAR*)(&this[1]); };

dit «prétendre que vous êtes en fait la première entrée dans un tableau d'éléments attribués ensemble maintenant, le deuxième élément isnt en fait un CString, il est un tampon fin NUL normale soit des caractères Unicode ou normal - à savoir, un LPTSTR » .

Une autre façon d'exprimer la même chose est:

TCHAR* data() { return (TCHAR*)(this + 1); };

Lorsque vous ajoutez 1 à un pointeur à T, vous ajoutez en fait 1 * sizeof T en termes d'une adresse mémoire brute. Donc, si l'on a un CString situé à 0x00000010 avec sizeof (CString) = 4, les données renvoie un pointeur vers un réseau à terminaison NUL de caractère tampon de départ à 0x00000014

Mais juste comprendre une chose sur isnt contexte nécessairement une bonne idée.

Pourquoi vous besoin de savoir?

scroll top