Pomijanie subtelnie odmiennej semantyki z powodu ADL, jak ogólnie powinienem używać usingi dlaczego? Czy to zależy od sytuacji (np. Nagłówek, który będzie #included 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ż.
stdbez sekundy. Ktoś definiujący przestrzeń nazw std prosi o kłopoty (i prawdopodobnie stara się skorzystać, że większość ludzi używa, stda nie używa ::std).