Namespaces
Variants

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

From 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 eine FormattedOutputFunction . Nach dem Konstruieren und Prüfen des Sentry-Objekts, bestimmt es die Ausgabefüllzeichen .

Anschließend fügt es jedes Zeichen aus der resultierenden Sequenz seq (dem Inhalt von str plus Füllzeichen) in den Ausgabestream os ein, als ob os. rdbuf ( ) - > sputn ( seq, n ) aufgerufen würde, wobei n gleich std:: max ( os. width ( ) , str. size ( ) ) ist. Schließlich ruft es os. width ( 0 ) auf, um die Effekte von std::setw falls vorhanden aufzuheben.

Äquivalent zu return os << std:: basic_string_view < CharT, Traits > ( str ) ; .

(seit C++17)
2) Verhält sich wie eine FormattedInputFunction . Nach dem Konstruieren und Überprüfen des Sentry-Objekts, das führende Leerzeichen überspringen kann, löscht es zunächst str mit str. erase ( ) , liest dann Zeichen von is und hängt sie an str an, als ob durch str. append ( 1 , c ) , bis eine der folgenden Bedingungen erfüllt ist:
  • N Zeichen wurden gelesen, wobei N gleich is. width ( ) ist, falls is. width ( ) > 0 , andernfalls ist N gleich str. max_size ( ) ,
  • der End-of-File-Zustand im Stream is auftritt, oder
  • std:: isspace ( c, is. getloc ( ) ) für das nächste Zeichen c in is true ist (dieses Leerzeichen bleibt im Eingabestream).

Falls keine Zeichen extrahiert werden, wird std::ios::failbit auf is gesetzt, was std::ios_base::failure auslösen kann.

Schließlich ruft es is. width ( 0 ) auf, um die Effekte von std::setw , falls vorhanden, aufzuheben.

Inhaltsverzeichnis

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)