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 ) ; . |
(since C++17) |
-
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 , если они присутствуют.
Содержание |
Исключения
Параметры
| os | - | поток вывода символов |
| is | - | поток ввода символов |
| str | - | строка для вставки или извлечения |
Возвращаемое значение
Пример
#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
(шаблон функции) |