J'utilise la déclaration "using" en C++ pour ajouter std::string et std::vector à l'espace de noms local (pour éviter de taper des "std: :" inutiles).
using std::string;
using std::vector;
class Foo { /*...*/ };
Quelle est la portée de cette déclaration ? Si je fais cela dans un en-tête, cela va-t-il injecter ces déclarations 'using' dans tous les fichiers cpp qui incluent l'en-tête ?
21 votes
Juste au cas où ce ne serait pas clair d'après les autres réponses ici : - Ne pas mettre un
using
déclaration (ouusing
) au niveau du fichier dans un fichier/en-tête d'inclusion ! Cela va causer des maux de tête aux utilisateurs de l'en-tête.1 votes
En fait, il ne faut pas mettre un
using
déclaration (a fortiori directive ) dans un en-tête du tout , même dans un espace de nom ! Voir portée de la déclaration d'utilisation dans un espace de nom pour les problèmes que cela entraîne.0 votes
@NilsvonBarth : C'est un peu trop simplifié. En utilisant
using
dans la classe et la fonction est sûre en ce qui concerne le problème discuté.0 votes
fr.cppreference.com/w/cpp/language/namespace#Using-directives
0 votes
Vous serez peut-être intéressé par la lecture du ADL C++ lookup rubrique .