En actualisant la sémantique subtilement différente en raison de l'ADL, comment dois-je généralement l'utiliser using
et pourquoi? Est-ce dépendant de la situation (par exemple, en-tête qui sera #include
d contre fichier source qui ne le sera pas)?
De plus, devrais-je préférer ::std::
ou std::
?
Au niveau de l'espace de noms
using namespace
:using namespace std; pair<string::const_iterator, string::const_iterator> f(const string &s) { return make_pair(s.begin(), s.end()); }
Être pleinement explicite:
std::pair<std::string::const_iterator, std::string::const_iterator> f(const std::string &s) { return std::make_pair(s.begin(), s.end()); }
Déclarations d'utilisation au niveau de l'espace de noms:
using std::pair; using std::string; pair<string::const_iterator, string::const_iterator> f(const string &s) { return make_pair(s.begin(), s.end()); }
Fonction en utilisant les déclarations locales:
std::pair<std::string::const_iterator, std::string::const_iterator> f(const std::string &s) { using std::make_pair; return make_pair(s.begin(), s.end()); }
Fonction locale
using namespace
:std::pair<std::string::const_iterator, std::string::const_iterator> f(const std::string &s) { using namespace std; return make_pair(s.begin(), s.end()); }
Autre chose?
Cela suppose une pré-C ++ 14, et donc pas de déduction de type retour en utilisant auto
.
::std::
rapport à std::
bien.
std
sans seconde cependant. Quelqu'un définissant un espace de noms std demande des problèmes (et cherche probablement à tirer profit de ce que la plupart des gens utilisent std
et non ::std
).