Spec-Zone.ru › C++

Именованные требования C++: функция неформатированного вывода

Требования

Функция неформатированного вывода — это функция вывода в поток, которая выполняет следующие действия:

1) Создаёт объект типа basic_ostream::sentry с автоматическим временем хранения, который выполняет следующие действия:
  • Если в выходном потоке установлены eofbit или badbit, устанавливает также failbit; если в маске исключений этого выходного потока (маска исключений, (exceptions() & failbit) != 0) включены исключения для failbit, выбрасывает ios_base::failure.
  • Сбрасывает связанный с помощью tie() выходной поток, если он есть.
2) Проверяет состояние sentry, вызывая 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::put
  • basic_ostream::write
  • basic_ostream::flush
  • basic_ostream::tellp (за исключением того, что вместо вывода вызывает pubseekoff)
  • basic_ostream::seekp (за исключением того, что вместо вывода вызывает pubseekoff или pubseekpos)
(начиная с 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API