Descontando semânticas sutilmente diferentes devido a ADL, como devo usar geralmente usinge por quê? É dependente da situação (por exemplo, cabeçalho que será #included 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.
stdsem 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 stde não ::std).