Именованные требования C++: функция неформатированного вывода
Требования
Функция неформатированного вывода — это функция вывода в поток, которая выполняет следующие действия:
1) Создаёт объект типаbasic_ostream::sentry с автоматическим временем хранения, который выполняет следующие действия: - Если в выходном потоке установлены
eofbitилиbadbit, устанавливает такжеfailbit; если в маске исключений этого выходного потока (маска исключений,(exceptions() & failbit) != 0) включены исключения дляfailbit, выбрасываетios_base::failure. - Сбрасывает связанный с помощью tie() выходной поток, если он есть.
sentry::operator bool(), что эквивалентно basic_ios::good. - Если оператор возвращает
falseили конструктор sentry выбрасывает исключение, вывод не выполняется. - Если оператор возвращает
true, пытается выполнить требуемый вывод, вставляя символы в выходной поток, как если бы был вызванrdbuf()->sputc(). Можно также использовать другие открытые членыstd::basic_ostream, но виртуальные членыrdbuf(), кромеoverflow(),xsputn()иsync(), вызываться не будут. - Если во время вывода выбрасывается исключение, устанавливает
badbitв выходном потоке. Если в маске исключений этого потока (маска исключений,(exceptions() & badbit) != 0) включены исключения дляbadbit, исключение также выбрасывается повторно. - Если исключение не было выброшено, возвращает значение, указанное функцией.
3) В любом случае, независимо от того, завершается ли функция исключением или возвращает управление, перед выходом из неё вызывается деструктор sentry.
Стандартная библиотека
Следующие функции стандартной библиотеки являются функциями неформатированного вывода.
basic_ostream::operator<<(basic_streambuf*)basic_ostream::putbasic_ostream::writebasic_ostream::flush
| (начиная с C++11) |
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применяется к | Опубликованное поведение | Правильное поведение |
|---|---|---|---|
| LWG 63 | C++98 | политика обработки исключений отсутствовала | добавлена |
| 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/UnformattedOutputFunction