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.Contents |
[edit]Exceptions
[edit]Parameters
os | - | a character output stream |
is | - | a character input stream |
str | - | the string to be inserted or extracted |
[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 |
[edit]See also
(C++17) | performs stream output on string views (function template) |