operator<<,>>(std::basic_string)
Определено в заголовочном файле <string>
|
||
template< class CharT, class Traits, class Allocator > std::basic_ostream<CharT, Traits>& |
(1) | |
template< class CharT, class Traits, class Allocator > std::basic_istream<CharT, Traits>& |
(2) | |
Затем вставляет каждый символ из результирующей последовательности 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);. |
(начиная с C++17) |
- прочитано
N
символов, гдеN
это is.width(), если is.width() > 0, иначеN
это str.max_size(), - в потоке is возникает условие конца файла, или
- std::isspace(c, is.getloc()) равно true для следующего символа c в is (этот пробельный символ остаётся во входном потоке).
Если никакие символы не извлекаются, то std::ios::failbit устанавливается в is, что может привести к генерации std::ios_base::failure.
В завершении вызывается is.width(0), чтобы отменить эффекты std::setw, если таковые имеются.Содержание |
[править] Исключения
[править] Параметры
os | — | поток вывода символов |
is | — | поток ввода символов |
str | — | строка, которую нужно вставить или извлечь |
[править] Возвращаемое значение
[править] Пример
#include <iostream> #include <sstream> #include <string> int main() { std::string greeting = "Привет, закрутился!"; std::istringstream iss(greeting); std::string hello_comma, whirled, word; iss >> hello_comma; iss >> whirled; std::cout << greeting << '\n' << hello_comma << '\n' << whirled << '\n'; // Сбросить поток iss.clear(); iss.seekg(0); while (iss >> word) std::cout << '+' << word << '\n'; }
Вывод:
Привет, закрутился! Привет, закрутился! +Привет, +закрутился!
[править] Отчёты о дефектах
Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:
Номер | Применён | Поведение в стандарте | Корректное поведение |
---|---|---|---|
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 проблема 25 сделало поведение неопределённым, если os.width() больше, чем str.size() |
сначала определяет заполнение и вместо него вставляет последовательность символов заполнения |
LWG 586 | C++98 | operator<< не вёл себя как FormattedOutputFunction
|
ведёт как FormattedOutputFunction |
[править] Смотрите также
(C++17) |
выполняет потоковый вывод строковых представлений (шаблон функции) |