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!