operator<<,>>(std::basic_string)
Defined in header <string>
|
||
template< class CharT, class Traits, class Allocator > std::basic_ostream<CharT, Traits>& |
(1) | |
template< class CharT, class Traits, class Allocator > std::basic_istream<CharT, Traits>& |
(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 return os << std::basic_string_view<CharT, Traits>(str);. |
(since C++17) |
-
N
characters are read, whereN
is is.width() if is.width() > 0, otherwiseN
is str.max_size(), - the end-of-file condition occurs in the stream 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.Exceptions
Parameters
os | - | a character output stream |
is | - | a character input stream |
str | - | the string to be inserted or extracted |
Return value
Example
#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!
Defect reports
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 check for 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 |
See also
(C++17) |
performs stream output on string views (function template) |