std::operator<<,>>
Определено в заголовочном файле <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) | |
1) В первую очередь создается объект-часовой std::basic_ostream::sentry, который сбросит (flush) связанный с помощью tie поток, если это необходимо, и выполнит проверку на наличие ошибок. Если объект-часовой вернет false, выполнение завершится сразу же.
Если же объект-часовой вернул true, определяется формат заполнения вывода таким же образом, как на этапе 3 функции num_put::put().
Далее каждый символ полученной последовательности (содержимое str
плюс заполнение) сохраняется в выходной поток os
, как при вызове os.rdbuf()->sputn(seq, n), где n=std::max(os.width(), str.size())
В завершении происходит вызов os.width(0).
2) В первую очередь создается объект-часовой std::basic_istream::sentry, который сбросит (flush) связанный с помощью tie поток, если это необходимо, извлечет и отбросит все ведущие пробельные символы (если не был снят флаг ios_base::skipws), и выполнит проверку на наличие ошибок. Если объект-часовой вернет false, выполнение завершится сразу же.
Если же объект-часовой вернул true, str
очищается с помощью str.erase()
Далее считываются символы из is
и добавляются к str
, как при вызове str.append(1, c), до тех пор, пока не выполнится одно из следующих условий:
- закончено считывание
N
символов, гдеN
равноis.width()
, еслиis.width() > 0
, в противном случаеN
равноstr.max_size()
- достигнуто состояние конца файла (EOF) в потоке
is
- std::isspace(c,is.getloc()) возвращает true для следующего символа
c
вis
(этот пробельный символ остается во входном потоке)
Если ни один символ не был извлечен, std::ios::failbit будет установлен для is
, что может сгенерировать исключение std::ios_base::failure.
В завершении происходит вызов os.width(0) и уничтожение объекта-часового std::basic_istream::sentry.
Содержание |
[править] Исключения
1) может сгенерировать std::ios_base::failure, если во время вывода было сгенерировано исключение.
2) может сгенерировать std::ios_base::failure, если ни один символ не был извлечен из is
(например, поток находится в конце файла или состоит только из пробелов), или если во время ввода было сгенерировано исключение.
[править] Параметры
os | - | поток вывода символов |
is | - | поток ввода символов |
str | - | строка, которая будет вставлена или извлечена |
[править] Возвращаемое значение
1) os
2) is
[править] Пример
#include <iostream> #include <string> int main() { std::string greeting = "Hello, whirled!" std::cout << greeting << '\n'; }
Вывод:
Hello, whirled!