C++ named requirements: FormattedOutputFunction
Содержание |
Требования
FormattedOutputFunction — это функция-член std::basic_ostream или функция, не являющаяся членом, связанная с std::basic_ostream , которая выполняет следующие операции:
- Создает объект sentry типа std::basic_ostream::sentry .
- Если bool ( sentry ) равен true , предпринимает попытку выполнить вывод путем вставки символов в выходной поток, как если бы вызывался rdbuf ( ) - > sputc ( ) . Также могут использоваться другие публичные члены std::basic_ostream , но виртуальные члены rdbuf ( ) кроме overflow() , xsputn() и sync() никогда не будут вызваны.
- Уничтожает 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 определяет заполнение, она делает это следующим образом.
Для заданной последовательности символов
Если ( os. flags ( ) & std:: ios_base :: adjustfield ) == std:: ios_base :: left равно true , символы заполнения размещаются после последовательности символов; в противном случае они размещаются перед последовательностью символов. |
(начиная с C++14) |
Стандартная библиотека
Следующие функции стандартной библиотеки являются FormattedOutputFunction s .
- basic_ostream::operator<< (std::basic_ostream&, int / long / double / void* / bool)
- operator<< (std::basic_ostream&, char)
- operator<< (std::basic_ostream&, char*)
- operator<< (std::basic_ostream&, const std::bitset&)
- operator<< (std::basic_ostream&, const std::basic_string&)
-
operator<<, при вызове на возвращаемом значении std::put_money
| (начиная с C++17) |
|
(начиная с C++23) |
Отчеты о дефектах
Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применяется к | Поведение в опубликованной версии | Исправленное поведение |
|---|---|---|---|
| LWG 160 | C++98 |
процесс определения, перевыбрасывается ли перехваченное исключение
упоминал несуществующую функцию
exception()
|
исправлено на exceptions() |
| LWG 165 | C++98 |
единственной виртуальной функцией, разрешённой для вызова
на rdbuf ( ) была
overflow()
|
также разрешены
xsputn()
и
sync()
|