Spec-Zone.ru › C++

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 вызывается перед выходом из этой функции.

Уточнение

Функции форматированного вывода определяют отступы в соответствии с 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)

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

Следующие функции стандартной библиотеки являются 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
  • operator<<(std::basic_ostream&, std::basic_string_view)
(с C++17)
  • print(std::ostream&, std::format_string<Args...>, Args&&...),
  • println(std::ostream&, std::format_string<Args...>, Args&&...),
  • vprint_unicode(std::ostream&, std::string_view, std::format_args),
  • vprint_nonunicode(std::ostream&, std::string_view, std::format_args),
за исключением того, что (учитывая, что 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()

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/named_req/FormattedOutputFunction

Spec-Zone.ru

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