Namensräume
Varianten
Aktionen

std::basic_stringbuf<CharT,Traits,Allocator>::str

Von cppreference.com
< cpp‎ | io‎ | basic stringbuf
 
 
 
 
(1)
std::basic_string<CharT, Traits, Allocator> str() const;
(bis C++20)
std::basic_string<CharT, Traits, Allocator> str() const&;
(seit C++20)
template<class SAlloc>
std::basic_string<CharT, Traits, SAlloc> str( const SAlloc& a ) const;
(2) (seit C++20)
std::basic_string<CharT, Traits, Allocator> str() &&;
(3) (seit C++20)
void str( const std::basic_string<CharT, Traits, Allocator>& s );
(4)
template<class SAlloc>
void str( const std::basic_string<CharT, Traits, SAlloc>& s );
(5) (seit C++20)
void str( std::basic_string<CharT, Traits, Allocator>&& s );
(6) (seit C++20)
template< class StringViewLike >
void str( const StringViewLike& t );
(7) (seit C++26)

Holt und setzt den zugrundeliegenden String.

In den folgenden Beschreibungen sind buf und mode expositions-nur Datenmitglieder von *this.

1) Erzeugt und gibt ein std::basic_string-Objekt zurück, das eine Kopie der zugrundeliegenden Zeichensequenz dieses std::basic_stringbuf enthält. Für reine Eingabeströme enthält der zurückgegebene String die Zeichen aus dem Bereich [eback()egptr()). Für Eingabe/Ausgabe- oder reine Ausgabeströme enthält er die Zeichen von pbase() bis zum letzten Zeichen der Sequenz, unabhängig von egptr() und epptr().
Die Zeichensequenz in einem für das Schreiben geöffneten Puffer kann aus Effizienzgründen überdimensioniert sein. In diesem Fall werden nur die *initialisierten Zeichen* zurückgegeben: diese Zeichen sind diejenigen, die aus dem String-Argument des Konstruktors, dem String-Argument des letzten Aufrufs einer Setter-Überladung von str() oder aus einer Schreiboperation stammen. Eine typische Implementierung, die eine Überallokation verwendet, pflegt einen High-Watermark-Zeiger, um das Ende des initialisierten Teils des Puffers zu verfolgen, und diese Überladung gibt die Zeichen von pbase() bis zum High-Watermark-Zeiger zurück.
Äquivalent zu return std::basic_string<CharT, Traits, Allocator>(view(), get_allocator());.
(seit C++20)
2) Dasselbe wie (1), außer dass a zur Erzeugung des zurückgegebenen std::basic_string verwendet wird. Äquivalent zu return std::basic_string<CharT, Traits, SAlloc>(view(), a);.
Diese Überladung nimmt an der Auflösungsentscheidung teil, nur wenn SAlloc die Anforderungen von Allocator erfüllt.
3) Erzeugt ein std::basic_string-Objekt, als ob es durch Verschieben aus der zugrundeliegenden Zeichensequenz von *this in buf erzeugt worden wäre. buf muss möglicherweise angepasst werden, um zunächst den gleichen Inhalt wie in (1) zu enthalten. Danach wird buf auf leer gesetzt und init_buf_ptrs() aufgerufen, und dann wird das std::basic_string-Objekt zurückgegeben.
4) Ersetzt die zugrundeliegende Zeichensequenz, als ob durch buf = s, und ruft dann init_buf_ptrs() auf.
5) Dasselbe wie (4), außer dass der Typ des Allocators von s nicht Allocator ist.
Diese Überladung nimmt an der Auflösungsentscheidung teil, nur wenn std::is_same_v<SAlloc, Allocator> false ist.
6) Ersetzt die zugrundeliegende Zeichensequenz, als ob durch buf = std::move(s), und ruft dann init_buf_ptrs() auf.
7) Konvertiert t implizit in eine String-Ansicht sv, als ob durch std::basic_string_view<CharT, Traits> sv = t;, ersetzt dann die zugrundeliegende Zeichensequenz, als ob durch buf = sv, und ruft dann init_buf_ptrs() auf.
Diese Überladung nimmt an der Auflösungsentscheidung teil, nur wenn std::is_convertible_v<const StringViewLike&,
                      std::basic_string_view<CharT, Traits>>
true ist.

Inhalt

[bearbeiten] Parameter

s - a ein std::basic_string-Objekt, das die Ersatzzeichensequenz enthält
t - ein Objekt (konvertierbar in std::basic_string_view), das die Ersatzzeichensequenz enthält
a - Allocator, der für alle Speicherzuweisungen des zurückgegebenen std::basic_string verwendet werden soll

[bearbeiten] Rückgabewert

1-3) Ein std::basic_string-Objekt, das die zugrundeliegende Zeichensequenz dieses Puffers enthält.
4-7) (keine)

[bearbeiten] Anmerkungen

Diese Funktion wird typischerweise über std::basic_istringstream::str(), std::basic_ostringstream::str() oder std::basic_stringstream::str() aufgerufen.

Feature-Test-Makro Wert Std Feature
__cpp_lib_sstream_from_string_view 202306L (C++26) Schnittstellen-String-Streams mit std::string_view

[bearbeiten] Beispiel

#include <iostream>
#include <sstream>
 
int main()
{
    int n;
 
    std::istringstream in;  // could also use in("1 2")
    in.rdbuf()->str("1 2"); // set the get area
    in >> n;
    std::cout << "after reading the first int from \"1 2\", the int is " 
              << n << ", str() = \"" << in.rdbuf()->str() << "\"\n"; // or in.str()
 
    std::ostringstream out("1 2");
    out << 3;
    std::cout << "after writing the int '3' to output stream \"1 2\""
              << ", str() = \"" << out.str() << "\"\n";
 
    std::ostringstream ate("1 2", std::ios_base::ate); // C++11
    ate << 3;
    std::cout << "after writing the int '3' to append stream \"1 2\""
              << ", str() = \"" << ate.str() << "\"\n";
}

Ausgabe

after reading the first int from "1 2", the int is 1, str() = "1 2"
after writing the int '3' to output stream "1 2", str() = "3 2"
after writing the int '3' to append stream "1 2", str() = "1 23"

[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 432 C++98 1. Überladung (1) gab den Inhalt der zugrundeliegenden Zeichensequenz nicht an.
der zugrundeliegenden Zeichensequenz
2. Überladung (4) gab nicht an, wie die
Eingabe- und Ausgabesequenzen initialisiert werden
beide spezifiziert
LWG 562 C++98 Überladung (4) setzte epptr() so, dass er auf eine Position nach dem letzten zugrundeliegenden
Zeichen zeigt, wenn bool(mode & std::ios_base::out) = true
epptr() kann über diese Position hinaus gesetzt werden
über diese Position hinaus

[bearbeiten] Siehe auch

holt oder setzt den Inhalt des zugrunde liegenden String-Geräteobjekts
(öffentliche Memberfunktion von std::basic_stringstream<CharT,Traits,Allocator>) [bearbeiten]
(C++20)
ruft eine Ansicht der zugrundeliegenden Zeichensequenz ab
(öffentliche Memberfunktion) [bearbeiten]