Std::string& en c++

Résolu/Fermé
dev_man Messages postés 83 Date d'inscription dimanche 30 octobre 2011 Statut Membre Dernière intervention 29 avril 2013 - 28 avril 2013 à 17:50
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 29 avril 2013 à 19:23
Bonjour,
je suis nouveau dans le monde de c++, j'aimerais bien savoir qu'est ce que ça veut dire cette écriture std::string&

merci d'avance.


3 réponses

mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
Modifié par mamiemando le 29/04/2013 à 11:00
std:: désigne le namespace std et string ici désigne une classe appelée "string".

C'est le namespace utilisé par la STL :
https://forums.commentcamarche.net/forum/affich-37604421-introduction-a-la-stl-en-c-standard-template-library

Dans l'idée cela signifie que dans le header <string> est déclarée la classe string :

namespace std { 
  class string { 
    //... 
  }; 
}


L'intérêt d'un namespace est d'éviter les collisions avec des classes provenant d'une autre librairie ou de ton programme si certaines d'entre elles portent le même nom.

Note que dans un namespace on peut déclarer aussi des variables (std::cin, std::cout, std::cerr par exemple pour les flux standards) des constantes (std::endl pour le retour à la ligne).

On peut également imbriquer des namespaces les uns dans les autres.

namespace a { 
  namespace b { 
    class C { 
      C() {} 
    }; 
  } 
} 

int main() { 
  a::b::C c; 
  return 0; 
};


En gros tu peux voir "::" un peu comme "/" quand on parle d'un chemin pour un fichier. À noter que "::" sert pour d'autres choses aussi en C++ (par exemple, accéder à un typedef ou un membre ou une fonction statique déclaré dans une classe).

Ensuite l'opérateur & désigne ici une référence. C'est un peu comme un pointeur en C, sauf que contrairement à un pointeur, une référence est toujours initialisée. Syntaxiquement une référence se manipule "comme si" on manipulait la variable elle même

#include <iostream> 

int main() { 
  int x = 7; 
  int & r = x; 
  r = 8; 
  std::cout << "x = " << x << std::endl; // affiche 8 
  return 0;
}


Les références sont massivement utilisées en C++ surtout quand il s'agit de passer des paramètres à une fonction. C'est en pratique moins coûteux qu'un passage par recopie (= par valeur) et syntaxiquement plus léger qu'un passage par pointeur. Plus de détails ici :
https://forums.commentcamarche.net/forum/affich-27614885-c-est-quoi-la-difference-entre-passage-par-reference-et-passage

Bonne chance
3