2014-04-17 19 views
7

Warum ist using namespace std; als schlechte Praxis in C++, aber using System; gilt als gute Praxis in C#? Sie scheinen analog zu sein (bringen Standard-Bibliothekssachen in den globalen Namensraum).mit System; in C# vs mit Namespace std; in C++

+2

Wer sagt, dass es gute Praxis in C# ist? – Ben

+1

Ich würde argumentieren, dass die Verwendung von Namespace std; in Implementierungsdateien in Ordnung ist; Behalte es einfach aus den Header-Dateien heraus. Es gibt jedoch schönere und explizitere Alternativen wie 'using std :: cout;'. – Suedocode

+0

mögliches Duplikat von [Warum ist "using namespace std;" als schlechte Praxis angesehen?] (http://stackoverflow.com/questions/1452721/why-isusing-namespace-std-sidered-bad-practice) – Deduplicator

Antwort

1

Weil C# keine freistehenden Funktionen hat.

Das Problem mit using namespace std in C++ ist, wenn der Compiler plötzlich die std:: Funktion statt Ihrer Funktion aufzurufen entscheidet, welche mit Namen wie count nicht überraschend ist, distance oder find sein Template-Funktionen, die einfach alles nehmen.

Dies ist viel weniger ein Problem in C#, weil C# keine freistehenden Funktionen hat und strengere implizite Konvertierungen hat (z. B. können Sie eine int nicht an eine Funktion übergeben, die einen Zeiger erwartet).

17

In C# wirkt sich eine using-Direktive nur auf die Datei oder den Namespace-Bereich aus, in dem sie platziert wird.

Wenn Sie using namespace std; in eine C++ - Header-Datei einschließen, wirkt sich das nicht nur auf diese Datei aus, sondern auf jede Datei, die sie enthält. Dies erzeugt Konfliktpotential in Dateien anderer Leute.

Sie könnten leicht argumentieren, dass es nicht "Best Practice" in C# ist, aber das Risiko ist dramatisch niedriger als in C++, da es nur den Datei- oder Namespacebereich beeinflusst, in dem die Anweisung platziert wird.

+2

Wo spricht das OP von puttig es in seine Überschriften? Sollte einige Argumente für Implementierungsdateien hinzufügen ... – Deduplicator