operator<<,>>(std::basic_string)
<string>
std::basic_ostream <CharT, Traits>&
operator<<( std::basic_ostream <CharT, Traits>& os,
std::basic_istream <CharT, Traits>&
operator>>( std::basic_istream <CharT, Traits>& is,
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.[edit] Exceptions
[edit] Parameters
[edit] Return value
[edit] 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!
[edit] 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 |