operator<<,>>(std::basic_string)
Aus de.cppreference.net
| Definiert in Header <string>
|
||
template< class CharT, class Traits, class Allocator >
std::basic_ostream<CharT, Traits>&
operator<<( std::basic_ostream<CharT, Traits>& os,
const std::basic_string<CharT, Traits, Allocator>& str );
|
(1) | |
template< class CharT, class Traits, class Allocator >
std::basic_istream<CharT, Traits>&
operator>>( std::basic_istream<CharT, Traits>& is,
std::basic_string<CharT, Traits, Allocator>& str );
|
(2) | |
1) Verhält sich wie ein FormattedOutputFunction. Nach dem Erstellen und Prüfen des Sentry-Objekts bestimmt die Auffüllung des Ausgabeformats.
Dann fügt jedes Zeichen aus der resultierenden Sequenz seq (den Inhalt von str plus Auffüllung) in den Ausgabestrom os ein, als ob es os.rdbuf()->sputn(seq, n) aufruft, wobei n ist std::max(os.width(), str.size())
Schließlich wird os.width(0) aufgerufen, um die Effekte von std::setw aufzuheben, falls vorhanden.
|
Äquivalent zu |
(seit C++17) |
2) Verhält sich wie ein FormattedInputFunction. Nach dem Erstellen und Prüfen des Sentry-Objekts, das führende Leerzeichen überspringen kann, wird zuerst
str mit str.erase() gelöscht, dann werden Zeichen von is gelesen und an str angehängt, als ob durch str.append(1, c), bis eine der folgenden Bedingungen eintritt:
NZeichen gelesen wurden, wobeiNistis.width()wennis.width() > 0, andernfallsNiststr.max_size(),- die Dateiende-Bedingung im Strom
iseintritt, oder std::isspace(c, is.getloc())isttruefür das nächste Zeichencinis(dieses Leerzeichen bleibt im Eingabestrom).
Wenn keine Zeichen extrahiert wurden, dann wird std::ios::failbit auf is gesetzt, was std::ios_base::failure werfen kann.
is.width(0) aufgerufen, um die Effekte von std::setw aufzuheben, falls vorhanden. Exceptions
1)
Kann
std::ios_base::failure
werfen, falls während der Ausgabe eine Exception ausgelöst wird.
2)
Kann
std::ios_base::failure
werfen, wenn keine Zeichen aus
is
extrahiert werden (z.B. wenn der Stream das Dateiende erreicht hat oder nur aus Leerzeichen besteht), oder wenn während der Eingabe eine Exception ausgelöst wird.
Parameter
| os | - | ein Zeichenausgabestrom |
| is | - | ein Zeicheneingabestrom |
| str | - | die einzufügende oder zu extrahierende Zeichenkette |
Rückgabewert
1)
os
2)
is
Beispiel
Diesen Code ausführen
#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!
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrektes Verhalten |
|---|---|---|---|
| LWG 25 | C++98 | n war der kleinere Wert von os. width ( ) und str. size ( ) | n ist der größere Wert von beiden |
| LWG 90 | C++98 |
std::
isspace
(
c, getloc
(
)
)
wurde zur Überprüfung von
Leerzeichen verwendet, aber
getloc
ist nicht deklariert in
<string>
|
ersetzte
getloc
(
)
durch is. getloc ( ) |
| LWG 91 | C++98 |
operator>>
verhielt sich nicht
wie 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 eingefügt durch
os.
rdbuf
(
)
-
>
sputn
(
str.
data
(
)
, n
)
,
und die Lösung von LWG-Problem 25 machte das Verhalten undefiniert, wenn os. width ( ) größer ist als str. size ( ) |
bestimmt zuerst die Auffüllung
und fügt die aufgefüllte Zeichensequenz stattdessen ein |
| LWG 586 | C++98 |
operator<<
verhielt sich nicht
wie eine FormattedOutputFunction |
verhält sich wie eine
FormattedOutputFunction |
Siehe auch
|
(C++17)
|
führt Stream-Ausgabe für String-Views durch
(Funktions-Template) |