# operator<<,>>(std::basic_string)

From cppreference.com
< cpp‎ | string‎ | basic string

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) |

1) Behaves as a FormattedOutputFunction. After constructing and checking the sentry object, determines the output format padding as follows:

  a) If `str.size()` is not less than `os.width()`, uses the range `[str.begin(), str.end())` as-is
  b) Otherwise, if (os.flags() & ios_base::adjustfield) == ios_base::left, places `os.width()-str.size()` copies of the `os.fill()` character after the character sequence
  c) Otherwise, places `os.width()-str.size()` copies of the `os.fill()` character before the character sequence

Then stores each character from the resulting sequence (the contents of `str` plus padding) to the output stream `os` as if by calling os.rdbuf()->sputn(seq, n), where n= std::max (os.width(), str.size())

Finally, calls os.width(0) to cancel the effects of std::setw, if any.

2) Behaves as a FormattedInputFunction. After constructing and checking the sentry object, which may skip leading whitespace, first clears `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()`
- the end-of-file condition occurs in the stream `is`
- 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

1) may throw std::ios_base::failure if an exception is thrown during output.

2) may throw 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.

### Parameters

os | - | a character output stream
is | - | a character input stream
str | - | the string to be inserted or extracted

### Return value

1) `os`

2) `is`

### Example

Run this code

    #include <iostream>
    #include <string>
    #include <sstream>

    int main()
    {
        std::string greeting = "Hello, whirled!";
        std::istringstream is(greeting);
        std::string hello_comma;
        is >> hello_comma;
        std::cout << greeting << '\n' << hello_comma << '\n';
    }

Output:

    Hello, whirled!
    Hello,

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/string/basic_string/operator_ltltgtgt&oldid=103394"