Namespaces
Variants

operator<<,>>(std::basic_string)

Aus de.cppreference.net
 
 
 
std::basic_string
 
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 return os << std::basic_string_view<CharT, Traits>(str);.

(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:
  • N Zeichen gelesen wurden, wobei N ist is.width() wenn is.width() > 0, andernfalls N ist str.max_size(),
  • die Dateiende-Bedingung im Strom is eintritt, oder
  • std::isspace(c, is.getloc()) ist true für das nächste Zeichen c in is (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.

Schließlich wird 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

#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)