24 Strings library [strings]

24.3 String classes [string.classes]

24.3.3 basic_­string non-member functions [string.nonmembers]

24.3.3.9 Inserters and extractors [string.io]

template<class charT, class traits, class Allocator> basic_istream<charT, traits>& operator>>(basic_istream<charT, traits>& is, basic_string<charT, traits, Allocator>& str);

Effects: Ведет себя как formatted input function. После создания sentry объекта, если часовой преобразуется в true, вызывает, str.erase() а затем извлекает символы из is и добавляет их, str как если бы, вызывая str.append(1, c). Если is.width() больше нуля, максимальное количество n добавляемых символов is.width(): в противном случае n это str.max_­size(). Символы извлекаются и добавляются до тех пор, пока не произойдет одно из следующих событий:

  • n символы сохраняются;

  • конец файла встречается во входной последовательности;

  • isspace(c, is.getloc()) является true для следующего доступного входного символа c.

После извлечения последнего символа (если есть) вызывается is.width(0) и sentry объект уничтожается.

Если функция не извлекает символы, она вызывает is.setstate(ios​::​failbit), что может вызвать throw ios_­base​::​failure ([iostate.flags]).

Returns: is.

template<class charT, class traits, class Allocator> basic_ostream<charT, traits>& operator<<(basic_ostream<charT, traits>& os, const basic_string<charT, traits, Allocator>& str);

Effects: Эквивалентен: return os << basic_­string_­view<charT, traits>(str);

template<class charT, class traits, class Allocator> basic_istream<charT, traits>& getline(basic_istream<charT, traits>& is, basic_string<charT, traits, Allocator>& str, charT delim); template<class charT, class traits, class Allocator> basic_istream<charT, traits>& getline(basic_istream<charT, traits>&& is, basic_string<charT, traits, Allocator>& str, charT delim);

Effects: Ведет себя как объект unformatted input function, за исключением того, что не влияет на значение, возвращаемое при последующих вызовах basic_­istream<>​::​gcount(). После создания sentry объекта, если часовой преобразуется в true, вызывает, str.erase() а затем извлекает символы is и добавляет их, str как если бы, вызывая str.append(1, c) до тех пор, пока не произойдет одно из следующих событий:

  • конец файла происходит во входной последовательности (в этом случае getline вызывается функция is.setstate(​ios_­base​::​eofbit)).

  • traits​::​eq(c, delim) для следующего доступного входного символа c (в этом случае c извлекается, но не добавляется) ([iostate.flags])

  • str.max_­size() символы сохраняются (в этом случае функция calls is.setstate(ios_­base​::​failbit)) ([iostate.flags])

Условия проверяются в указанном порядке. В любом случае после извлечения последнего символа sentry объект уничтожается.

Если функция не извлекает символы, она вызывает is.setstate(ios_­base​::​failbit) which may throw ios_­base​::​failure ([iostate.flags]).

Returns: is.

template<class charT, class traits, class Allocator> basic_istream<charT, traits>& getline(basic_istream<charT, traits>& is, basic_string<charT, traits, Allocator>& str); template<class charT, class traits, class Allocator> basic_istream<charT, traits>& getline(basic_istream<charT, traits>&& is, basic_string<charT, traits, Allocator>& str);

Returns: getline(is, str, is.widen('\n')).