T
Ich verwende using namespace std (in aller Regel) nicht. Im Header ist das tabu und ich möchte keinen anderen C++-Stil in der cpp-Datei. Soll ich etwa das std:: löschen, wenn ich eine Funktion oder Methode aus dem Header in die cpp verschiebe?
Na ja - das war erst mal das Stil-Argument. Es gibt aber noch ein gewichtigeres Argument:
Namespaces dienen dazu, Symbolkonflikte zu vermeiden. Der Ausdruck "using namespace ..." mischt 2 Namespaces. Also er macht dieses Namespace-Feature quasi wieder Rückgängig. Wenn ich in 2 Bibliotheken 2 Symbole mit gleichem Namen habe aber unterschiedlichen Namespaces, dann darf ich nur eines von beiden mit "using namespace" importieren. Also werde ich die eine Bibliothek voll qualifiziert angeben und die andere nicht. Das ist inkonsequent. Versucht man konsequent zu sein, dann ist das "using namespace" also Tabu.
Ich möchte auch nicht den std-Namespace anders behandeln, als andere Namespaces. Es gibt ihn aus gutem Grund. Ich möchte ihn nutzen.
Es gibt auch durchaus Situationen, wo man gleiche Namen der Standardbibliothek bewusst nutzt. Beispielsweise habe ich mal eine Klasse geschrieben, die einen iostream auf einem TCP-Socket implementiert. Diese Klasse heisst cxxtools::net::iostream. Schon der Bezeichner sagt mir, dass diese Klasse aus der Bibliothek cxxtools kommt und dort aus dem Netzwerk-Modul. Außerdem sagt er mir, dass es sich um einen iostream handelt. Dadurch habe ich bereits bei der Benutzung des Bezeichners dem Codeleser wesentliche Informationen gegeben, um meinen Code zu verstehen.
Wenn ich jetzt aber irgendwo ein "using namespace std" aufgerufen habe, dann finde ich möglicherweise irgendwo anders im Code "iostream". Jetzt ist es nicht offensichtlich, ob es sich um den std::iostream handelt oder etwa den cxxtools::net::iostream. Ich muss im Code suchen, ob ich den std-namespace oder den cxxtools::net-namespace importiert habe, oder aber ich mich aktuell im cxxtools::net-namespace befinde. Das hilft also nicht gerade, den Code leicht verständlich zu machen.