Descontando semânticas sutilmente diferentes devido a ADL, como devo usar geralmente using
e por quê? É dependente da situação (por exemplo, cabeçalho que será #include
d vs. arquivo de origem que não será)?
Além disso, devo preferir ::std::
ou std::
?
No nível do espaço para nome
using namespace
:using namespace std; pair<string::const_iterator, string::const_iterator> f(const string &s) { return make_pair(s.begin(), s.end()); }
Sendo totalmente explícito:
std::pair<std::string::const_iterator, std::string::const_iterator> f(const std::string &s) { return std::make_pair(s.begin(), s.end()); }
Usando declarações de nível de espaço para nome:
using std::pair; using std::string; pair<string::const_iterator, string::const_iterator> f(const string &s) { return make_pair(s.begin(), s.end()); }
Função-local usando declarações:
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()); }
Função local
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()); }
Algo mais?
Isso pressupõe pré-C ++ 14 e, portanto, nenhuma dedução de tipo de retorno usando auto
.
::std::
vs. std::
embora.
std
sem segundo embora. Alguém que define um espaço para nome std está solicitando problemas (e provavelmente buscando tirar vantagem que a maioria das pessoas está usando std
e não ::std
).