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++
Antwort
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).
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.
Wo spricht das OP von puttig es in seine Überschriften? Sollte einige Argumente für Implementierungsdateien hinzufügen ... – Deduplicator
- 1. Std :: Thread-Klasse vs Std :: this_thread Namespace in C++?
- 2. Unterschied in using namespace (std :: vs :: std: :)
- 3. Namespace Referenzen in C# vs. VB.Net
- 4. C# Task.Run() vs. C++ std :: async()
- 5. C++ mit Namespace in Quelldateien
- 6. C++ std :: System 'System' kein Mitglied von Std
- 7. Rust "verwenden" vs. C++ "using namespace"
- 8. Mit 'boost :: system :: error_code' in C++
- 9. Wie Debuggen aller std-Namespace in Visual C++ 2013?
- 10. Mit sprintf mit std :: string in C++
- 11. XSD-Namespace in C# -Namespace
- 12. C++ - Standardbibliothek - Std :: setenv vs setenv
- 13. C++ globale Variable in Namespace
- 14. Wie Namespace in C# mit Alias
- 15. Namespace Einzug in Visual Studio mit C#
- 16. Methoden in Namespace C#
- 17. Abrufen von Werten mit System() in C
- 18. CLR mit C++ STD interferieren?
- 19. Namespace Clashing in C++
- 20. Ausführung c Programmaufruf mit System
- 21. Namespace Verwirrung mit C++/CLI in Windows Forms-Anwendung
- 22. C# Namespace Alias-Qualifikationsmerkmal (: :) vs. Dereferenzierungsoperator (.)
- 23. C++ .NET konvertieren System :: String in std :: string
- 24. Std :: Zeichenfolge in C#?
- 25. Mehrere Namespace-Deklaration in C++
- 26. C++ Fehler mit Std :: Set
- 27. Typ-/Namespace-Aliaskonventionen in C#
- 28. "Namespace Std {}" vor "Namespace Std verwenden;"
- 29. string in namespace std nennt keinen typ
- 30. Funktion vs Variablendeklaration in C++
Wer sagt, dass es gute Praxis in C# ist? – Ben
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
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