Namespaces
Variants

C++ named requirements: FormattedOutputFunction

From cppreference.net
C++ named requirements

Contenidos

Requisitos

Una FormattedOutputFunction es una función miembro de std::basic_ostream o una función no miembro que involucra std::basic_ostream que realiza las siguientes operaciones:

  1. Construye un objeto sentry de tipo std::basic_ostream::sentry .
  2. Si bool ( sentry ) es true , intenta realizar la salida deseada insertando los caracteres en el flujo de salida como si llamara a rdbuf ( ) - > sputc ( ) . También se pueden usar otros miembros públicos de std::basic_ostream , pero los miembros virtuales de rdbuf ( ) excepto overflow() , xsputn() y sync() nunca serán llamados.
  3. Destruye sentry y retorna * this .

Si sentry no se construye correctamente, o bool ( sentry ) es false , no se produce ninguna salida.

Si la salida no pudo generarse, llama a setstate ( std:: ios_base :: failbit ) , lo cual puede lanzar una excepción.

Si se lanza una excepción durante la salida, entonces std:: ios_base :: badbit se establece en el estado de error de * this sin causar que se lance una std::ios_base::failure . Si las excepciones en badbit están habilitadas en la máscara de excepciones de este flujo (es decir, ( exceptions ( ) & badbit ) ! = 0 ), la excepción también se vuelve a lanzar.

Cuando se lanza una excepción desde la función de salida formateada, sentry también se destruye antes de salir de la función.

Relleno

Las funciones de salida formateada determinan el relleno de acuerdo con std::num_put::do_put() etapa 3.

(hasta C++14)

Si una función de salida formateada de un flujo os determina el relleno, lo hace de la siguiente manera.

Dada una secuencia de caracteres CharT seq donde CharT es el tipo de contenedor de caracteres de os , si la longitud de seq es menor que os. width ( ) , entonces se añaden suficientes copias de os. fill ( ) a esta secuencia según sea necesario para rellenar hasta un ancho de os. width ( ) caracteres.

Si ( os. flags ( ) & std:: ios_base :: adjustfield ) == std:: ios_base :: left es true , los caracteres de relleno se colocan después de la secuencia de caracteres; de lo contrario, se colocan antes de la secuencia de caracteres.

(desde C++14)

Biblioteca estándar

Las siguientes funciones de la biblioteca estándar son FormattedOutputFunction s .

(desde C++17)
excepto que (dado que os es un objeto de flujo de salida):
  • cualquier excepción lanzada por la llamada a std::vformat se propaga sin tener en cuenta el valor de os. exceptions ( ) y sin activar ios_base::badbit en el estado de error de os ;
  • si la inserción en os falla, llama a os. setstate ( ios_base :: badbit ) (lo cual puede lanzar ios_base::failure ).
(desde C++23)

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares publicados anteriormente de C++.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 160 C++98 el proceso de determinar si la excepción capturada
se vuelve a lanzar mencionaba una función inexistente exception()
corregido a exceptions()
LWG 165 C++98 el único miembro virtual permitido para ser
llamado en rdbuf ( ) era overflow()
también permitido
xsputn() y sync()