Descontando semánticas sutilmente diferentes debido a ADL, ¿cómo debería usarlo en general using
y por qué? ¿Depende de la situación (por ejemplo, el encabezado que será #include
d frente al archivo fuente que no)?
Además, ¿debería preferir ::std::
o std::
?
Nivel de espacio de nombres
using namespace
:using namespace std; pair<string::const_iterator, string::const_iterator> f(const string &s) { return make_pair(s.begin(), s.end()); }
Siendo completamente 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()); }
Declaraciones de uso de nivel de espacio de nombres:
using std::pair; using std::string; pair<string::const_iterator, string::const_iterator> f(const string &s) { return make_pair(s.begin(), s.end()); }
Declaraciones de uso de funciones 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()); }
Función 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 más?
Esto supone que es anterior a C ++ 14 y, por lo tanto, no se utiliza la deducción de tipo de retorno auto
.
::std::
vs std::
sin embargo.
std
Sin embargo, estoy usando sin segundo. Alguien que define un espacio de nombres estándar está pidiendo problemas (y probablemente está buscando aprovechar la ventaja que la mayoría de la gente está usando std
y no ::std
).