Ein-/Ausgabe-Bibliothek
C++ beinhaltet die folgenden Ein-/Ausgabe-Bibliotheken: eine OOP-orientierte Stream-basierte I/O-Bibliothek, eine Familie von Print-FunktionenPrint-Funktionen(seit C++23) und die Standardmenge an C-Style I/O-Funktionen.
[bearbeiten] Stream-basierte I/O
Die stream-basierte Ein-/Ausgabe-Bibliothek ist um abstrakte Ein-/Ausgabe-Geräte herum organisiert. Diese abstrakten Geräte ermöglichen es, mit demselben Code Ein-/Ausgabe für Dateien, Speicher-Streams oder benutzerdefinierte Adaptergeräte durchzuführen, die beliebige Operationen (z. B. Komprimierung) "on the fly" ausführen.
Die meisten Klassen sind templates, sodass sie an jeden grundlegenden Zeichentyp angepasst werden können. Für die gängigsten grundlegenden Zeichentypen (char und wchar_t) werden separate Typdeklarationen bereitgestellt. Die Klassen sind in folgender Hierarchie organisiert:
Vererbungdiagramm
Abstraktion | |
| Definiert in Header
<ios> | |
| verwaltet Formatierungsflags und Ein-/Ausgabe-Exceptions (Klasse) | |
| verwaltet einen beliebigen Stream-Puffer (Klassen-Template) | |
| Definiert in Header
<streambuf> | |
| abstrahiert ein Rohgerät (class template) | |
| Definiert in Header
<ostream> | |
| kapselt ein gegebenes abstraktes Gerät (std::basic_streambuf) und stellt eine High-Level-Ausgabeschnittstelle bereit (class template) | |
| Definiert in Header
<istream> | |
| kapselt ein gegebenes abstraktes Gerät (std::basic_streambuf) und stellt eine High-Level-Eingabeschnittstelle bereit (class template) | |
| kapselt ein gegebenes abstraktes Gerät (std::basic_streambuf) und stellt eine High-Level-Ein-/Ausgabe-Schnittstelle bereit (Klassen-Template) | |
Implementierung von Datei-I/O | |
| Definiert in Header
<fstream> | |
| implementiert rohe Datei-Geräte (Klassen-Template) | |
| implementiert High-Level-Datei-Stream-Eingabeoperationen (Klassen-Template) | |
| implementiert High-Level-Datei-Stream-Ausgabeoperationen (Klassen-Template) | |
| implementiert High-Level-Datei-Stream-Ein-/Ausgabeoperationen (Klassen-Template) | |
Implementierung von String-I/O | |
| Definiert in Header
<sstream> | |
| implementiert rohe String-Geräte (Klassen-Template) | |
| implementiert High-Level-String-Stream-Eingabeoperationen (Klassen-Template) | |
| implementiert High-Level-String-Stream-Ausgabeoperationen (Klassen-Template) | |
| implementiert High-Level-String-Stream-Ein-/Ausgabeoperationen (Klassen-Template) | |
Implementierung von Array-I/O | |
| Definiert in Header
<spanstream> | |
| (C++23) |
implementiert rohe Puffergeräte mit festen Zeichen (Klassen-Template) |
| (C++23) |
implementiert Eingabeoperationen für Puffer mit festen Zeichen (Klassen-Template) |
| (C++23) |
implementiert Ausgabeoperationen für Puffer mit festen Zeichen (Klassen-Template) |
| (C++23) |
implementiert Ein-/Ausgabeoperationen für Puffer mit festen Zeichen (Klassen-Template) |
| Definiert in Header
<strstream> | |
| (in C++98 veraltet)(in C++26 entfernt) |
implementiert rohe Zeichen-Array-Geräte (Klasse) |
| (in C++98 veraltet)(in C++26 entfernt) |
implementiert Zeichen-Array-Eingabeoperationen (Klasse) |
| (in C++98 veraltet)(in C++26 entfernt) |
implementiert Zeichen-Array-Ausgabeoperationen (Klasse) |
| (in C++98 veraltet)(in C++26 entfernt) |
implementiert Zeichen-Array-Ein-/Ausgabeoperationen (Klasse) |
Synchronisierte Ausgabe (seit C++20) | |
| Definiert in Header
<syncstream> | |
| (C++20) |
Wrapper für synchronisierte Ausgabegeräte (Klassen-Template) |
| (C++20) |
Wrapper für synchronisierte Ausgabe-Streams (Klassen-Template) |
[bearbeiten] Typdeklarationen
Die folgenden Typdeklarationen für gängige Zeichentypen sind im Namespace std bereitgestellt:
[bearbeiten] Vordefinierte Standard-Stream-Objekte
| Definiert in Header
<iostream> | |
| liest vom Standard-C-Eingabestrom stdin (globales Objekt) | |
| schreibt in den Standard-C-Ausgabestrom stdout (globales Objekt) | |
| schreibt in den Standard-C-Fehlerstrom stderr, unbuffered (globales Objekt) | |
| schreibt in den Standard-C-Fehlerstrom stderr (globales Objekt) | |
[bearbeiten] I/O-Manipulatoren
Die stream-basierte I/O-Bibliothek verwendet I/O-Manipulatoren (z. B. std::boolalpha, std::hex usw.), um zu steuern, wie Streams sich verhalten.
[bearbeiten] Typen
Die folgenden Hilfstypen sind definiert:
| Definiert in Header
<ios> | |
| repräsentiert die relative Dateiposition (Offset von fpos), ausreichend zur Darstellung jeder Dateigröße (Typdeklaration) | |
| repräsentiert die Anzahl der in einer I/O-Operation übertragenen Zeichen oder die Größe eines I/O-Puffers (Typdeklaration) | |
| repräsentiert die absolute Position in einem Stream oder einer Datei (Klassen-Template) | |
Die folgenden Typdeklarationen für std::fpos<std::mbstate_t> werden bereitgestellt:
| Definiert in Header
<iosfwd> | |
| Typ | Definition |
std::streampos
|
std::fpos<std::char_traits<char>::state_type> |
std::wstreampos
|
std::fpos<std::char_traits<wchar_t>::state_type> |
std::u8streampos (C++20) |
std::fpos<std::char_traits<char8_t>::state_type> |
std::u16streampos (C++11) |
std::fpos<std::char_traits<char16_t>::state_type> |
std::u32streampos (C++11) |
std::fpos<std::char_traits<char32_t>::state_type> |
[bearbeiten] Fehlerkategorie-Schnittstelle (seit C++11)
| Definiert in Header
<ios> | |
| (C++11) |
die IO-Stream-Fehlercodes (Aufzählung) |
| (C++11) |
identifiziert die iostream-Fehlerkategorie (Funktion) |
[bearbeiten] Print-Funktionen (seit C++23)
Die Unicode-fähigen Print-Familienfunktionen, die formatierten I/O auf Text durchführen, der bereits formatiert ist. Sie bringen alle Leistungsvorteile von std::format, sind standardmäßig sprachunabhängig, reduzieren globale Zustände, vermeiden die Zuweisung eines temporären std::string-Objekts und den Aufruf von operator<< und machen im Allgemeinen die Formatierung effizienter im Vergleich zu iostreams und stdio.
Die folgenden print-ähnlichen Funktionen werden bereitgestellt:
| Definiert in Header
<print> | |
| (C++23) |
druckt nach stdout oder einem Dateistream unter Verwendung der formatierten Darstellung der Argumente (Funktionstemplate) |
| (C++23) |
dasselbe wie std::print, außer dass jeder Druck durch eine zusätzliche neue Zeile beendet wird (Funktionstemplate) |
| druckt auf Unicode-fähige stdout oder einen Dateistream unter Verwendung der typ-erased Argumentdarstellung (Funktion) | |
| druckt auf stdout oder einen Dateistream unter Verwendung der typ-erased Argumentdarstellung (Funktion) | |
| Definiert in Header
<ostream> | |
| (C++23) |
gibt die formatierten Darstellung der Argumente aus (Funktionstemplate) |
| (C++23) |
gibt die formatierten Darstellung der Argumente mit angehängtem '\n' aus (Funktions-Template) |
[bearbeiten] C-Style I/O
C++ beinhaltet auch die von C definierten Ein-/Ausgabe-Funktionen, wie z. B. std::fopen, std::getc usw.
[bearbeiten] Siehe auch
| Dateisystem-Bibliothek (seit C++17) |