Immer wenn ich Bücher über C++ lese, finde ich ein Beispiel für "using namespace std".nützliche Namespaces in C++ außer "Std"
Ich würde gerne wissen, ob irgendwelche anderen Namespaces in C++ vorhanden sind, die nützlich sind?
Immer wenn ich Bücher über C++ lese, finde ich ein Beispiel für "using namespace std".nützliche Namespaces in C++ außer "Std"
Ich würde gerne wissen, ob irgendwelche anderen Namespaces in C++ vorhanden sind, die nützlich sind?
Alles in der C++ - Standardbibliothek befindet sich im Namespace std
(oder einem verschachtelten Namespace unter std
).
Andere Bibliotheken verwenden natürlich andere Namespaces. Sie sollten die Dokumentation aller anderen Bibliotheken lesen, die Sie verwenden, um festzustellen, welche Namespaces sie verwenden.
Das heißt, die Verwendung von Direktiven sind in der Regel eine schlechte Idee. Es ist viel besser, mithilfe von Deklarationen einzelne Namen aus einem Namespace zu verwenden. Dies ist besonders wichtig für den Namespace std
. Es gibt viele häufig verwendete Namen im Namespace std
und es ist einfach, in schwer zu lösende Probleme einzutreten, wo Sie versuchen, auf Ihre eigene Funktion oder Klasse zu verweisen und versehentlich auf eine Standardbibliotheksfunktion oder -klasse zu verweisen. Zum Beispiel ist das schlecht:
using namespace std;
cout << "Hello world" << endl;
Das ist besser:
using std::cout;
using std::endl;
cout << "Hello world" << endl;
Meiner Meinung nach, Code ist in der Regel sauberen, wenn Sie voll qualifizierte Namen in Ihrem Programm verwenden; dies macht es klarer in dem Unternehmen kommen aus und lässt weniger Raum für Fehler.
std::cout << "Hello world" << std::endl;
(Ausnahmen gibt es für alle diese Regeln, natürlich Wenn zum Beispiel std::bind
verwenden, es ist ein schlagendes std::placeholders::_1
zu verwenden und seine Freunde. Es ist viel einfacher Code zu lesen, die using std::placeholders;
verwendet und dann beziehen sich nur auf _1
, _2
usw. die Verwendung Richtlinie innerhalb der Funktion sein sollte, aber nicht im Namespace Umfang.)
Den letzten Kommentar ignorieren.(Bill, es ist 'namespace po = boost :: program_options', nicht' namespace verwenden po = boost :: program_options') –
Dies ist der Namensraum für die C++ Standardbibliothek. AFAIK Dies ist der einzige Namespace, den Sie "out-of-the-box" haben. Alle anderen müssen Sie selbst definieren oder Sie erhalten sie von anderen Bibliotheken.
Alle Dateien in der C++ - Standardbibliothek deklarieren alle ihre Entitäten im std-Namespace. Sie werden nur dann auf andere Namespaces treffen, wenn Sie eine Bibliothek eines Drittanbieters verwenden (z. B. boost) oder eigene Namespaces definieren.
Ich bin überrascht, niemand erwähnte den std::rel_ops
Namensraum. Es definiert operator!=
, operator>
, operator<=
und operator>=
.
Sie können diese im Geltungsbereich durch eine using-Direktive oder Deklaration und definieren Sie eine operator<
und operator==
für Ihren Typ. Die Betreiber von std::rel_ops
arbeiten dann in Bezug auf diese beiden.
Brennen Sie diese Bücher. –