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

Header: <string>

  1. Behaves as a FormattedOutputFunction. After constructing and checking the sentry object, determines the output format padding. 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)

# Declarations

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

# Parameters

# 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';
}

# Defect reports

DRApplied toBehavior as publishedCorrect behavior
LWG 25C++98n was the smaller of os.width() and str.size()n is the larger of them
LWG 90C++98std::isspace(c, getloc()) was used to checkfor spaces, but getloc is not declared in replaced getloc()with is.getloc()
LWG 91C++98operator» did not behaveas a FormattedInputFunctionbehaves as aFormattedInputFunction
LWG 211C++98operator» did not set failbit if no character is extractedsets failbit
LWG 435C++98characters were inserted by os.rdbuf()->sputn(str.data(), n),and the resolution of LWG issue 25 made the behaviorundefined if os.width() is larger than str.size()determines the paddingfirst and inserts the paddedcharacter sequence instead
LWG 586C++98operator« did not behaveas a FormattedOutputFunctionbehaves as aFormattedOutputFunction

# See also