Wie soll ich generell vorgehen using
und warum? Ist es situationsabhängig (zB Header, der #include
d sein wird, vs. Quelldatei, der nicht sein wird)?
Auch sollte ich lieber ::std::
oder std::
?
Namespace-Ebene
using namespace
:using namespace std; pair<string::const_iterator, string::const_iterator> f(const string &s) { return make_pair(s.begin(), s.end()); }
Vollständig explizit sein:
std::pair<std::string::const_iterator, std::string::const_iterator> f(const std::string &s) { return std::make_pair(s.begin(), s.end()); }
Namespace-Ebene mit Deklarationen:
using std::pair; using std::string; pair<string::const_iterator, string::const_iterator> f(const string &s) { return make_pair(s.begin(), s.end()); }
Funktionslokale using-Deklarationen:
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()); }
Funktionslokal
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()); }
Etwas anderes?
Dies setzt Pre-C ++ 14 voraus und somit keine Return-Type-Deduktion mit auto
.
::std::
vs. std::
though.
std
ohne Sekunde. Jemand, der einen std-Namespace definiert, fragt nach Problemen (und versucht wahrscheinlich, die Vorteile zu nutzen, die die meisten Leute nutzen std
und nicht ::std
).