Именуемые требования C++: FormattedOutputFunction
Требования
FormattedOutputFunction — это функция вывода в поток, которая выполняет следующие действия:
- Создаёт объект типа
basic_ostream::sentryс автоматическим временем хранения, который выполняет следующие действия: - если в выходном потоке установлены
eofbitилиbadbit, устанавливает такжеfailbit; если в маске исключений этого выходного потока включены исключения дляfailbit((exceptions() & failbit) != 0), выбрасываетios_base::failure. - сбрасывает связанный с ним выходной поток, если это применимо.
- Проверяет состояние объекта sentry, вызывая
sentry::operator bool(), что эквивалентноbasic_ios::good. - Если объект sentry вернул
falseили его конструктор выбросил исключение, вывод не выполняется. - Если объект sentry вернул
true, пытается выполнить требуемый вывод, вставляя символы в выходной поток, как если бы был вызванrdbuf()->sputc(). Также можно использовать другие открытые членыstd::basic_ostream, но виртуальные членыrdbuf(), за исключениемoverflow(),xsputn()иsync(), вызваны не будут. - Если вывод не удалось выполнить, устанавливает
failbit. Если в маске исключений этого потока включены исключения дляfailbit((exceptions() & failbit) != 0), выбрасываетios_base::failure. - Если во время вывода выбрасывается исключение, устанавливает
badbitв выходном потоке. Если в маске исключений этого потока включены исключения дляbadbit((exceptions() & badbit) != 0), исключение также выбрасывается повторно. - Если исключение не выброшено, возвращает
*this. - В любом случае — как при завершении из-за исключения, так и при возврате — деструктор объекта sentry вызывается до выхода из этой функции.
Заполнение
| Функции форматированного вывода определяют заполнение согласно этапу 3 | (до C++14) |
| Если функция форматированного вывода потока Пусть дана последовательность символов типа Если | (начиная с C++14) |
Стандартная библиотека
Следующие функции стандартной библиотеки являются FormattedOutputFunctions.
basic_ostream::operator<<(std::basic_ostream&, int / long / double / void* / bool)operator<<(std::basic_ostream&, char)operator<<(std::basic_ostream&, char*)operator<<(std::basic_ostream&, const std::bitset&)operator<<(std::basic_ostream&, const std::basic_string&)-
operator<<, при вызове для возвращаемого значенияstd::put_money
| (начиная с C++17) |
os — объект выходного потока):
| (начиная с C++23) |
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были применены ретроспективно к ранее опубликованным стандартам C++.
| DR | Применяется к | Опубликованное поведение | Правильное поведение |
|---|---|---|---|
| LWG 160 | C++98 | при определении того, следует ли повторно выбрасывать перехваченное исключение, упоминалась несуществующая функция exception() | исправлено на exceptions() |
| LWG 165 | C++98 | единственным виртуальным членом, который разрешалось вызывать для rdbuf(), был overflow() | также разрешалось вызыватьxsputn() и sync() |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/named_req/FormattedOutputFunction