Ca arrive puisque "test" est un const char*, donc un pointeur sur des char (constants). C'est tout à fait autorisé d'additioner des pointeurs, ou des pointeurs et des entiers, ce qui a pour effet de déplacer le pointeur en mémoire. Un exemple plus simple et plus connu est:
1 2 3 4 5 6 7 8 9 10 11
|
char chaine[] = "test";
char* p = chaine;
// on va parcourir la chaine jusqu'à tomber sur le "caractère" NULL (fin de chaine)
while (*p != NULL)
{
cout << *p << endl; // affiche le caractère courant
++p; // passe au suivant
// tu peux mettre p = p + sizeof(char); à la place de ++p;
} |
Ce qui fait avancer ton pointeur de char en char jusqu'à la fin de la chaine, et affiche donc t \ e\ s \ t (un caractère par ligne).
Donc dans
std::string s = "file" + 2;
"file" retourne un pointeur sur le 1er caractère de la chaine, et donc "file" + 2 un pointeur sur le 3ème
Partager