Namespaces
Variants

C++ named requirements: UnformattedOutputFunction

From cppreference.net
C++ named requirements

Требования

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::tellp (за исключением того, что вызывает pubseekoff вместо output)
  • basic_ostream::seekp (за исключением того, что вызывает pubseekoff или pubseekpos вместо output)
(начиная с 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()