En actualisant la sémantique subtilement différente en raison de l'ADL, comment dois-je généralement l'utiliser usinget pourquoi? Est-ce dépendant de la situation (par exemple, en-tête qui sera #included 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.
stdsans 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 stdet non ::std).