operator<<,>>(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) |
Затем вставляет каждый символ из результирующей последовательности seq (содержимого str и заполнения) в выходной поток os, как если бы был вызван os.rdbuf()->sputn(seq, n), где n — это std::max(os.width(), str.size()) Наконец, вызывает os.width(0), чтобы отменить действие std::setw, если оно было.
| Эквивалентно | (начиная с C++17) |
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, если оно было.
Исключения
std::ios_base::failure, если во время вывода возникает исключение.std::ios_base::failure, если из is не извлечено ни одного символа (например, поток достиг конца файла или содержит только пробельные символы), либо если во время ввода возникает исключение.Параметры
| os | - | выходной символьный поток |
| is | - | входной символьный поток |
| str | - | строка для вставки или извлечения |
Возвращаемое значение
os
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>> не вёл себякак функция форматированного ввода | ведёт себя как функция форматированного ввода |
| 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<< не вёл себякак функция форматированного вывода | ведёт себя как функция форматированного вывода |
См. также
|
(C++17) | выполняет вывод строкового представления в поток (шаблон функции) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/string/basic_string/operator_ltltgtgt