Defined 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) Behaves as a FormattedOutputFunction. After constructing and checking the sentry object, determines the output format padding as follows:
str.size()
is not less than os.width()
, uses the range [str.begin(), str.end())
as-is. (os.flags() & ios_base::adjustfield) == ios_base::left
, places os.width() - str.size()
copies of the os.fill()
character after the character sequence. os.width() - str.size()
copies of the os.fill()
character before the character sequence. Then stores each character from the resulting sequence (the contents of str
plus padding) to the output stream os
as if by calling os.rdbuf()->sputn(seq, n)
, where n
is std::max(os.width(), str.size())
.
Finally, calls os.width(0)
to cancel the effects of std::setw
, if any.
2) Behaves as a FormattedInputFunction. After constructing and checking the sentry object, which may skip leading whitespace, first clears str
with str.erase()
, then reads characters from is
and appends them to str
as if by str.append(1, c)
, until one of the following conditions becomes true:
N
characters are read, where N
is is.width()
if is.width() > 0
, otherwise N
is str.max_size()
, is
, or std::isspace(c, is.getloc())
is true for the next character c
in is
(this whitespace character remains in the input stream). If no characters are extracted then std::ios::failbit
is set on is
, which may throw std::ios_base::failure
.
Finally, calls is.width(0)
to cancel the effects of std::setw
, if any.
1) may throw std::ios_base::failure
if an exception is thrown during output.
2) may throw std::ios_base::failure
if no characters are extracted from is
(e.g the stream is at end of file, or consists of whitespace only), or if an exception is thrown during input.
os | - | a character output stream |
is | - | a character input stream |
str | - | the string to be inserted or extracted |
os
is
#include <iostream> #include <string> #include <sstream> 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'; }
Output:
Hello, whirled! Hello, whirled! +Hello, +whirled!
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
LWG 25 | C++98 | n was the smaller of os.width() and str.size() | n is the larger of them |
LWG 90 | C++98 | std::isspace(c, getloc()) was used to checkfor spaces, but getloc is not declared in <string> | replaced withstd::isspace(c, is.getloc()) |
LWG 91 | C++98 | operator>> did not behaveas a formatted input function | behaves as a formatted input function |
(C++17) | performs stream output on string views (function template) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/string/basic_string/operator_ltltgtgt