Namespaces
Variants

C++ named requirements: FormattedOutputFunction

From cppreference.net
C++ named requirements

Содержание

Требования

FormattedOutputFunction — это функция-член std::basic_ostream или функция, не являющаяся членом, связанная с std::basic_ostream , которая выполняет следующие операции:

  1. Создает объект sentry типа std::basic_ostream::sentry .
  2. Если bool ( sentry ) равен true , предпринимает попытку выполнить вывод путем вставки символов в выходной поток, как если бы вызывался rdbuf ( ) - > sputc ( ) . Также могут использоваться другие публичные члены std::basic_ostream , но виртуальные члены rdbuf ( ) кроме overflow() , xsputn() и sync() никогда не будут вызваны.
  3. Уничтожает sentry и возвращает * this .

Если sentry не удалось создать, или bool ( sentry ) возвращает false , вывод не производится.

Если вывод не может быть сгенерирован, вызывает setstate ( std:: ios_base :: failbit ) , что может вызвать исключение.

Если во время вывода возникает исключение, то в std:: ios_base :: badbit устанавливается в состоянии ошибки * this без вызова исключения std::ios_base::failure . Если исключения для badbit включены в маске исключений этого потока (т.е. ( exceptions ( ) & badbit ) ! = 0 ), исключение также повторно выбрасывается.

Когда исключение выбрасывается из функции форматированного вывода, sentry также уничтожается перед выходом из функции.

Заполнение

Форматированные функции вывода определяют заполнение в соответствии с std::num_put::do_put() этапом 3.

(до C++14)

Если форматированная функция вывода потока os определяет заполнение, она делает это следующим образом.

Для заданной последовательности символов CharT seq , где CharT является типом контейнера символов потока os , если длина seq меньше os. width ( ) , то необходимое количество копий os. fill ( ) добавляется к этой последовательности для заполнения до ширины os. width ( ) символов.

Если ( os. flags ( ) & std:: ios_base :: adjustfield ) == std:: ios_base :: left равно true , символы заполнения размещаются после последовательности символов; в противном случае они размещаются перед последовательностью символов.

(начиная с C++14)

Стандартная библиотека

Следующие функции стандартной библиотеки являются FormattedOutputFunction s .

(начиная с C++17)
за исключением того, что (при условии, что os является объектом выходного потока):
  • любое исключение, выброшенное при вызове std::vformat , распространяется без учета значения os. exceptions ( ) и без установки ios_base::badbit в состоянии ошибки os ;
  • если вставка в os завершается неудачей, вызывается os. setstate ( ios_base :: badbit ) (что может выбросить ios_base::failure ).
(начиная с C++23)

Отчеты о дефектах

Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Применяется к Поведение в опубликованной версии Исправленное поведение
LWG 160 C++98 процесс определения, перевыбрасывается ли перехваченное исключение
упоминал несуществующую функцию exception()
исправлено на exceptions()
LWG 165 C++98 единственной виртуальной функцией, разрешённой для вызова
на rdbuf ( ) была overflow()
также разрешены
xsputn() и sync()