Pomijanie subtelnie odmiennej semantyki z powodu ADL, jak ogólnie powinienem używać using
i dlaczego? Czy to zależy od sytuacji (np. Nagłówek, który będzie #include
d kontra plik źródłowy, który nie będzie)?
Należy również podkreślić, wolę ::std::
albo std::
?
Poziom przestrzeni nazw
using namespace
:using namespace std; pair<string::const_iterator, string::const_iterator> f(const string &s) { return make_pair(s.begin(), s.end()); }
Będąc w pełni jawnym:
std::pair<std::string::const_iterator, std::string::const_iterator> f(const std::string &s) { return std::make_pair(s.begin(), s.end()); }
Deklaracje użycia na poziomie przestrzeni nazw:
using std::pair; using std::string; pair<string::const_iterator, string::const_iterator> f(const string &s) { return make_pair(s.begin(), s.end()); }
Lokalne funkcje-deklaracje użycia:
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()); }
Funkcja lokalna
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()); }
Coś innego?
Zakłada się, że jest to wersja wcześniejsza niż C ++ 14, a zatem nie stosuje się dedukcji typu zwrotu auto
.
::std::
vs. std::
chociaż.
std
bez sekundy. Ktoś definiujący przestrzeń nazw std prosi o kłopoty (i prawdopodobnie stara się skorzystać, że większość ludzi używa, std
a nie używa ::std
).