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 Namespace std 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 abortmö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