C++ назначенные требования: FormattedOutputFunction
Требования
FormattedOutputFunction — это функция потокового вывода, которая выполняет следующие действия:
- Конструирует объект типа
basic_ostream::sentryс автоматическим сроком жизни, который выполняет следующее: - если
eofbitилиbadbitустановлены в выходном потоке, устанавливаетfailbit, и если исключения поfailbitвключены в маске исключений этого выходного потока (маска исключений) ((exceptions() & failbit) != 0), выбрасываетios_base::failure. - сбрасывает связанный выходной поток, если применимо.
- Проверяет состояние объекта sentry, вызвав
sentry::operator bool(), что эквивалентноbasic_ios::good. - Если sentry вернула
falseили конструктор sentry выбросил исключение, вывод не происходит. - Если sentry вернула
true, пытается выполнить желаемый вывод, вставляя символы в выходной поток так, как будто вызванаrdbuf()->sputc(). Другие публичные членыstd::basic_ostreamтакже могут быть использованы, но виртуальные членыrdbuf()за исключениемoverflow(),xsputn()иsync()никогда не будут вызваны. - Если вывод не может быть сгенерирован, устанавливает
failbit. Если исключения поfailbitвключены в маске исключений этого потока (маска исключений) ((exceptions() & failbit) != 0), выбрасываетios_base::failure. - если исключение выброшено во время вывода, устанавливает
badbitв выходном потоке. Если исключения поbadbitвключены в маске исключений этого потока (маска исключений) ((exceptions() & badbit) != 0), исключение также перебрасывается. - Если исключение не было выброшено, возвращает
*this. - В любом случае, независимо от завершения исключением или возвращением, деструктор sentry вызывается перед выходом из этой функции.
Уточнение
Функции форматированного вывода определяют отступы в соответствии с |
(до C++14) |
Если функция форматированного вывода потока Учитывая последовательность символов Если |
(с C++14) |
Стандартная библиотека
Следующие функции стандартной библиотеки являются FormattedOutputFunctions.
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) |
os — объект выходного потока):
|
(с C++23) |
Отчеты о дефектах
Следующие поведенческие отчеты о дефектах были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применён к | Поведение, как опубликовано | Корректное поведение |
|---|---|---|---|
| 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/w/cpp/named_req/FormattedOutputFunction