operator<<,>>(std::basic_string)
| Definiert in Header <string> |
||
| template< class CharT, class Traits, class Allocator > std::basic_ostream<CharT, Traits>& |
(1) | |
| template< class CharT, class Traits, class Allocator > std::basic_istream<CharT, Traits>& |
(2) | |
Anschließend wird jedes Zeichen aus der resultierenden Sequenz seq (dem Inhalt von str plus Füllzeichen) in den Ausgabestrom os eingefügt, als ob os.rdbuf()->sputn(seq, n) aufgerufen würde, wobei n gleich std::max(os.width(), str.size()) ist. Schließlich wird os.width(0) aufgerufen, um die Auswirkungen von std::setw abzubrechen, falls vorhanden.
|
Äquivalent zu return os << std::basic_string_view<CharT, Traits>(str);. |
(seit C++17) |
-
NZeichen werden gelesen, wobeiNgleich is.width() ist, wenn is.width() > 0, andernfalls istNgleich str.max_size(), - die End-of-File-Bedingung im Strom is eintritt, oder
- std::isspace(c, is.getloc()) ist true für das nächste Zeichen c in is (dieses Leerzeichen verbleibt im Eingabestrom).
Wenn keine Zeichen extrahiert werden, wird std::ios::failbit für is gesetzt, was std::ios_base::failure auslösen kann.
Schließlich wird is.width(0) aufgerufen, um die Auswirkungen von std::setw abzubrechen, falls vorhanden.Inhalt |
[bearbeiten] Ausnahmen
[bearbeiten] Parameter
| os | - | ein Zeichen-Ausgabestrom |
| ist | - | ein Zeichen-Eingabestrom |
| str | - | der einzufügende oder zu extrahierende String |
[bearbeiten] Rückgabewert
[bearbeiten] Beispiel
#include <iostream> #include <sstream> #include <string> int main() { std::string greeting = "Hello, whirled!"; std::istringstream iss(greeting); std::string hello_comma, whirled, word; iss >> hello_comma; iss >> whirled; std::cout << greeting << '\n' << hello_comma << '\n' << whirled << '\n'; // Reset the stream iss.clear(); iss.seekg(0); while (iss >> word) std::cout << '+' << word << '\n'; }
Ausgabe
Hello, whirled! Hello, whirled! +Hello, +whirled!
[bearbeiten] Fehlerberichte
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 25 | C++98 | n war das kleinere von os.width() und str.size() | n ist das größere von beiden |
| LWG 90 | C++98 | std::isspace(c, getloc()) wurde zur Prüfung verwendet für Leerzeichen, aber getloc ist nicht in <string> deklariert |
ersetzt getloc() durch is.getloc() |
| LWG 91 | C++98 | operator>> verhielt sich nichtwie eine FormattedInputFunction |
verhält sich wie eine FormattedInputFunction |
| LWG 211 | C++98 | operator>> setzte failbit nicht, wenn kein Zeichen extrahiert wurde |
setzt failbit |
| LWG 435 | C++98 | Zeichen wurden mittels os.rdbuf()->sputn(str.data(), n) eingefügt, und die Auflösung von LWG-Problem 25 machte das Verhalten undefiniert, wenn os.width() größer als str.size() ist |
bestimmt die Füllzeichen zuerst und fügt die aufgefüllte Zeichensequenz stattdessen ein |
| LWG 586 | C++98 | operator<< verhielt sich nichtwie eine FormattedOutputFunction |
verhält sich wie eine FormattedOutputFunction |
[bearbeiten] Siehe auch
| (C++17) |
führt die Stromausgabe auf Zeichenansichten durch (Funktionsschablone) |