Namensräume
Varianten
Aktionen

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

Von cppreference.com
< cpp‎ | string‎ | basic string
 
 
 
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 der Konstruktion und Prüfung des Sentry-Objekts werden die Formatierungsfüllzeichen für die Ausgabe bestimmt.

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)
2) Verhält sich wie eine FormattedInputFunction. Nach der Konstruktion und Prüfung des Sentry-Objekts, das führende Leerzeichen überspringen kann, wird zunächst str mit str.erase() gelöscht. Dann werden Zeichen aus is gelesen und an str angehängt, als ob str.append(1, c) aufgerufen würde, bis eine der folgenden Bedingungen eintritt:
  • N Zeichen werden gelesen, wobei N gleich is.width() ist, wenn is.width() > 0, andernfalls ist N gleich 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

1) Kann std::ios_base::failure auslösen, wenn während der Ausgabe eine Ausnahme auftritt.
2) Kann std::ios_base::failure auslösen, wenn keine Zeichen aus is extrahiert werden (z. B. der Strom ist am Ende der Datei oder besteht nur aus Leerzeichen) oder wenn während der Eingabe eine Ausnahme auftritt.

[bearbeiten] Parameter

os - ein Zeichen-Ausgabestrom
ist - ein Zeichen-Eingabestrom
str - der einzufügende oder zu extrahierende String

[bearbeiten] Rückgabewert

1) os
2) is

[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 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 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 nicht
wie eine FormattedOutputFunction
verhält sich wie eine
FormattedOutputFunction

[bearbeiten] Siehe auch

führt die Stromausgabe auf Zeichenansichten durch
(Funktionsschablone) [edit]