Verwenden von C++-Bibliotheksheadern
Der Inhalt eines Standardheaders kann durch Benennen in einer include-Direktive eingebunden werden.
#include <iostream>// include I/O facilities
Die Standardheader können in beliebiger Reihenfolge eingebunden werden. Ein Standardheader kann mehrmals eingebunden werden. Und es können mehrere Standardheader eingebunden werden, die dasselbe Makro oder denselben Typ definieren. Fügen Sie keinen Standardheader in eine Deklaration ein. Definieren Sie keine Makros mit denselben Namen wie Schlüsselwörter, bevor Sie einen Standardheader einfügen.
Ein C++-Bibliotheksheader enthält alle anderen C++-Bibliotheksheader, die zum Definieren der erforderlichen Typen benötigt werden. (Schließen Sie immer explizit alle in einer Übersetzungseinheit benötigten C++-Bibliotheksheader ein, was Sie jedoch falsch über die tatsächlichen Abhängigkeiten erraten.) Eine Standard-C-Kopfzeile enthält niemals einen anderen Standardheader. Mit einem Standardheader werden lediglich die in diesem Dokument hierfür beschriebenen Entitäten deklariert bzw. definiert.
Alle Funktionen in der Bibliothek werden in einem Standardheader deklariert. Im Gegensatz zu Standard C wird vom Standardheader kein Maskierungsmakro mit demselben Namen wie die Funktion bereitgestellt, das die Funktionsdeklaration maskiert und denselben Effekt erzielt. Weitere Informationen zu Maskierungsmakros finden Sie unter C++ Library Conventions (C++-Bibliothekskonventionen).
Alle Namen außer operator delete
und operator new
in den C++-Bibliotheksheadern werden im Namespace std
oder in einem Namespace definiert, der innerhalb von Namespace std
geschachtelt ist. Auf den Namen cin
wird beispielsweise mit std::cin
verwiesen. Beachten Sie jedoch, dass Makronamen nicht der Namespacequalifizierung unterliegen, sodass Sie immer ohne Namespacequalifizierer schreiben __STD_COMPLEX
.
In einigen Übersetzungsumgebungen kann das Einbinden eines C++-Bibliotheksheaders dazu führen, dass externe, im Namespace std
deklarierte Namen mit individuellen using
-Deklarationen für die einzelnen Namen auch in den globalen Namespace gehoben werden. Andernfalls führt der Header keine Bibliotheksnamen in den aktuellen Namespace ein.
Der C++-Standard verlangt, dass die C-Standardheader alle externen Namen in Namespace std
deklarieren und sie anschließend mit individuellen using
-Deklarationen für die einzelnen Namen in den globalen Namespace heben. In einigen Übersetzungsumgebungen enthalten die C-Standardheader jedoch keine Namespacedeklarationen. Stattdessen werden alle Namen direkt im globalen Namespace deklariert. Somit wird das Ergebnis am besten portierbar, wenn im Umgang mit Namespaces zwei Regeln befolgt werden:
Um im Namespace
std
sicher einen externen Namen zu deklarieren, der traditionell in<stdlib.h>
deklariert ist, schließen Sie beispielsweise den Header<cstdlib>
ein. Beachten Sie, dass der Name möglicherweise auch im globalen Namespace deklariert wird.Um sicher im globalen Namespace einen externen Namen zu deklarieren, der in
<stdlib.h>
deklariert ist, schließen Sie den Header<stdlib.h>
direkt ein. Beachten Sie, dass der Name möglicherweise auch im Namespacestd
deklariert wird.
Wenn Sie also anrufen std::abort
möchten, um eine abnorme Beendigung zu verursachen, sollten Sie diese einschließen <cstdlib>
. Wenn Sie anrufen abort
möchten, sollten Sie dies einschließen <stdlib.h>
.
Alternativ können Sie folgende Deklaration schreiben:
using namespace std;
Damit werden alle Bibliotheksnamen in den aktuellen Namespace eingebunden. Wenn Sie diese Deklaration direkt nach den include-Direktiven einfügen, werden die Namen in den globalen Namespace gehoben. Danach müssen Sie sich in der restlichen Übersetzungseinheit um Namespaces keine Gedanken mehr zu machen. Außerdem umgehen Sie damit die meisten Differenzen zwischen unterschiedlichen Übersetzungsumgebungen.
Sofern nicht ausdrücklich anders angegeben, sollten Sie Namen nicht im Namespace std
oder in einem Namespace angeben, der im Namespace std
in Ihrem Programm geschachtelt ist.
Siehe auch
Übersicht über die C++-Standardbibliothek
Threadsicherheit in der C++-Standardbibliothek