C++ named requirements: UnformattedOutputFunction
From cppreference.net
Требования
UnformattedOutputFunction — это функция вывода в поток, которая выполняет следующие действия:
1)
Создает объект типа
basic_ostream::sentry
с автоматической продолжительностью хранения, который выполняет следующие действия:
-
Если
eofbit
или
badbit
установлены в выходном потоке, также устанавливает
failbit
, и если исключения для
failbitвключены в маске исключений этого выходного потока exception mask ( ( exceptions ( ) & failbit ) ! = 0 ), генерирует исключение ios_base::failure . - Сбрасывает буфер связанного выходного потока (tie()'d output stream), если применимо.
2)
Проверяет статус часового, вызывая
sentry::operator bool()
, что эквивалентно
basic_ios::good
.
- Если оператор возвращает false или конструктор часового выбрасывает исключение, вывод не производится.
- Если оператор возвращает true , предпринимает попытку выполнить вывод, вставляя символы в выходной поток, как если бы вызывался rdbuf ( ) - > sputc ( ) . Другие публичные члены std::basic_ostream также могут использоваться, но виртуальные члены rdbuf ( ) , кроме overflow() , xsputn() и sync() , никогда не будут вызываться.
-
-
Если во время вывода возникает исключение, устанавливает
badbitв выходном потоке. Если исключения дляbadbitвключены в маске исключений этого потока exception mask ( ( exceptions ( ) & badbit ) ! = 0 ), исключение также перевыбрасывается. - Если исключение не было выброшено, возвращает значение, указанное функцией.
-
Если во время вывода возникает исключение, устанавливает
3)
В любом случае, независимо от завершения через исключение или возврат, деструктор дозорного объекта вызывается перед выходом из этой функции.
Стандартная библиотека
Следующие стандартные библиотечные функции являются UnformattedOutputFunction s .
- basic_ostream::operator<< (basic_streambuf*)
- basic_ostream::put
- basic_ostream::write
- basic_ostream::flush
|
(начиная с C++11) |
Отчеты о дефектах
Следующие отчеты об изменениях в поведении, содержащие описания дефектов, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 63 | C++98 | политика обработки исключений отсутствовала | добавлена |
| LWG 160 | C++98 |
процесс определения, перевыбрасывается ли перехваченное исключение,
упоминал несуществующую функцию
exception()
|
исправлено на exceptions() |
| LWG 165 | C++98 |
единственной виртуальной функцией, разрешённой для вызова
на rdbuf ( ) была
overflow()
|
также разрешены
xsputn()
и
sync()
|