Namespaces
Variants

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

From cppreference.net
std::basic_string
Определено в заголовочном файле <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) Ведут себя как FormattedOutputFunction . После создания и проверки сторожевого объекта, определяют заполнение выходного формата .

Затем вставляют каждый символ из результирующей последовательности seq (содержимого str плюс заполнение) в выходной поток os как если бы вызывали os. rdbuf ( ) - > sputn ( seq, n ) , где n равно std:: max ( os. width ( ) , str. size ( ) ) . Наконец, вызывают os. width ( 0 ) чтобы отменить эффекты std::setw , если они есть.

Эквивалентно return os << std:: basic_string_view < CharT, Traits > ( str ) ; .

(since C++17)
2) Вебёт себя как FormattedInputFunction . После создания и проверки сторожевого объекта, который может пропускать ведущие пробельные символы, сначала очищает str с помощью str. erase ( ) , затем читает символы из is и добавляет их в str как если бы с помощью str. append ( 1 , c ) , до тех пор пока одно из следующих условий не станет истинным:
  • N символов прочитано, где N равно is. width ( ) если is. width ( ) > 0 , иначе N равно str. max_size ( ) ,
  • возникает условие конца файла в потоке is , или
  • std:: isspace ( c, is. getloc ( ) ) возвращает true для следующего символа c в is (этот пробельный символ остаётся во входном потоке).

Если ни одного символа не извлечено, то на is устанавливается std::ios::failbit , что может вызвать исключение std::ios_base::failure .

В завершение вызывает is. width ( 0 ) чтобы отменить эффекты std::setw , если они присутствуют.

Содержание

Исключения

1) Может выбросить std::ios_base::failure если во время вывода возникло исключение.
2) Может выбросить std::ios_base::failure если не извлечено ни одного символа из is (например, поток находится в конце файла или состоит только из пробельных символов), или если во время ввода возникло исключение.

Параметры

os - поток вывода символов
is - поток ввода символов
str - строка для вставки или извлечения

Возвращаемое значение

1) os
2) 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';
}

Вывод:

Hello, whirled!
Hello,
whirled!
+Hello,
+whirled!

Отчеты о дефектах

Следующие отчеты об изменениях в поведении, содержащие описания дефектов, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Применено к Поведение в опубликованной версии Корректное поведение
LWG 25 C++98 n было меньшим из os. width ( ) и str. size ( ) n является большим из них
LWG 90 C++98 std:: isspace ( c, getloc ( ) ) использовалось для проверки
пробелов, но getloc не объявлен в <string>
заменено getloc ( )
на is. getloc ( )
LWG 91 C++98 operator>> не вел себя
как FormattedInputFunction
ведет себя как
FormattedInputFunction
LWG 211 C++98 operator>> не устанавливал failbit если ни один символ не извлекался устанавливает failbit
LWG 435 C++98 символы вставлялись с помощью os. rdbuf ( ) - > sputn ( str. data ( ) , n ) ,
и решение LWG issue 25 сделало поведение
неопределенным, если os. width ( ) больше чем str. size ( )
определяет заполнение
сначала и вставляет заполненную
последовательность символов вместо этого
LWG 586 C++98 operator<< не вел себя
как FormattedOutputFunction
ведет себя как
FormattedOutputFunction

Смотрите также

(C++17)
выполняет потоковый вывод для string views
(шаблон функции)