C++ требования к именованным элементам: UnformattedOutputFunction
Требования
UnformattedOutputFunction — это функция потокового вывода, которая выполняет следующее:
1) Создает объект типаbasic_ostream::sentry со статическим временем жизни, который выполняет следующее: - Если
eofbitилиbadbitустановлены в выходном потоке, устанавливает такжеfailbit, и если исключения приfailbitвключены в маске исключений выходного потока (маска исключений) ((exceptions() & failbit) != 0), выбрасываетios_base::failure. - Выполняет сброс привязанного выходного потока, если применимо.
sentry::operator bool(), что эквивалентно basic_ios::good. - Если оператор возвращает
falseили конструктор стражи выбрасывает исключение, вывод не выполняется. - Если оператор возвращает
true, пытается выполнить требуемый вывод, вставляя символы в выходной поток так, как если бы вызываласьrdbuf()->sputc(). Другие публичные членыstd::basic_ostreamтакже могут быть использованы, но виртуальные членыrdbuf()за исключениемoverflow(),xsputn()иsync()никогда не будут вызваны. - Если при выводе возникает исключение, устанавливается
badbitв выходном потоке. Если исключения приbadbitвключены в маске исключений этого потока (маска исключений) ((exceptions() & badbit) != 0), исключение также перебрасывается. - Если исключение не было выброшено, возвращается значение, указанное функцией.
3) В любом случае, независимо от того, прерывается ли выполнение исключением или возвратом, деструктор стражи вызывается перед завершением этой функции.
Стандартная библиотека
Следующие функции стандартной библиотеки являются UnformattedOutputFunctions.
-
basic_ostream::operator<<(basic_streambuf*) -
basic_ostream::put -
basic_ostream::write -
basic_ostream::flush
| (с 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/w/cpp/named_req/UnformattedOutputFunction