std::basic_string<CharT, Traits, Allocator> str() const; | (1) | |
void str( const std::basic_string<CharT, Traits, Allocator>& s); | (2) |
Gets and sets the underlying string.
std::basic_string
object containing a copy of this std::basic_stringbuf
's underlying character sequence. For input-only streams, the returned string contains the characters from the range [eback(), egptr())
. For input/output or output-only streams, contains the characters from pbase()
to the last character in the sequence regardless of egptr()
and epptr()
. The member character sequence in a buffer open for writing can be over-allocated for efficiency purposes. In that case, only the initialized characters are returned: these characters are the ones that were obtained from the string argument of the constructor, the string argument of the most recent call to the second overload of str() , or from an write operation. A typical implementation that uses over-allocation maintains a high-watermark pointer to track the end of the initialized part of the buffer and this overload returns the characters from pbase() to the high-watermark pointer | (since C++11) |
std::basic_stringbuf
and then configures a new underlying character sequence containing a copy of the contents of s
. The pointers of std::basic_streambuf
are initialized as follows: mode & ios_base::in == true
), eback()
points at the first character, gptr() == eback()
, and egptr() == eback() + s.size()
: the subsequent input will read the first character copied from s
. mode & ios_base::out == true
), pbase()
points at the first character and epptr() >= pbase() + s.size()
(epptr is allowed to point farther so that the following sputc()
wouldn't immediately call overflow()
) mode & ios_base::ate == true
), pptr() == pbase() + s.size()
, so that subsequent output will be appended to the last character copied from s
(since C++11) pptr() == pbase()
, so that subsequent output will overwrite the characters copied from s
.s | - | a string object holding the replacement character sequence |
This function is typically accessed through std::basic_stringstream::str()
.
#include <sstream> #include <iostream> 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"; }
Output:
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"
gets or sets the contents of underlying string device object (public member function of std::basic_stringstream ) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
http://en.cppreference.com/w/cpp/io/basic_stringbuf/str