Sconti semantici leggermente diversi a causa dell'ADL, come dovrei generalmente usare using
e perché? Dipende dalla situazione (es. Intestazione che sarà #include
d vs. file sorgente che non lo farà)?
Inoltre, dovrei preferire ::std::
ostd::
?
Livello di spazio dei nomi
using namespace
:using namespace std; pair<string::const_iterator, string::const_iterator> f(const string &s) { return make_pair(s.begin(), s.end()); }
Essere pienamente espliciti:
std::pair<std::string::const_iterator, std::string::const_iterator> f(const std::string &s) { return std::make_pair(s.begin(), s.end()); }
Dichiarazioni di utilizzo a livello di spazio dei nomi:
using std::pair; using std::string; pair<string::const_iterator, string::const_iterator> f(const string &s) { return make_pair(s.begin(), s.end()); }
Dichiarazioni di utilizzo locali delle funzioni:
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()); }
Funzione 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()); }
Qualcos'altro?
Ciò presuppone pre-C ++ 14 e quindi nessuna deduzione del tipo di ritorno utilizzando auto
.
::std::
contro vs. std::
però.
std
senza secondi però. Qualcuno che definisce uno spazio dei nomi standard richiede problemi (e probabilmente cerca di trarre vantaggio dal fatto che la maggior parte delle persone stia usando std
e non ::std
).