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) |
Then inserts each character from the resulting sequence seq
(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.
Equivalent to | (since C++17) |
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.
std::ios_base::failure
if an exception is thrown during output.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 <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'; }
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 getloc() with is.getloc() |
LWG 91 | C++98 | operator>> did not behaveas a FormattedInputFunction | behaves as a FormattedInputFunction |
LWG 211 | C++98 | operator>> did not set failbit if no character is extracted | sets failbit |
LWG 435 | C++98 | characters were inserted by os.rdbuf()->sputn(str.data(), n) ,and the resolution of LWG issue 25 made the behavior undefined if os.width() is larger than str.size() | determines the padding first and inserts the padded character sequence instead |
LWG 586 | C++98 | operator<< did not behaveas a FormattedOutputFunction | behaves as a FormattedOutputFunction |
(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