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