Namespaces
Variants

std:: format_error

From cppreference.net
Definido en el encabezado <format>
class format_error : public runtime_error
(desde C++20)

Define el tipo de objeto de excepción que se lanza para reportar errores en la biblioteca de formato.

Todas las funciones miembro de std::format_error son constexpr : es posible crear y utilizar objetos std::format_error en la evaluación de una expresión constante.

Sin embargo, los objetos std::format_error generalmente no pueden ser constexpr , porque cualquier almacenamiento asignado dinámicamente debe liberarse en la misma evaluación de la expresión constante.

(since C++26)
cpp/error/exception cpp/error/runtime error std-format error-inheritance.svg

Diagrama de herencia

Contenidos

Funciones miembro

(constructor)
construye un nuevo objeto format_error con el mensaje dado
(función miembro pública)
operator=
reemplaza el objeto format_error
(función miembro pública)

std::format_error:: format_error

format_error ( const std:: string & what_arg ) ;
(1) (constexpr desde C++26)
format_error ( const char * what_arg ) ;
(2) (constexpr desde C++26)
format_error ( const format_error & other ) noexcept ;
(3) (constexpr desde C++26)
1) Construye el objeto de excepción con what_arg como cadena explicativa. Después de la construcción, std:: strcmp ( what ( ) , what_arg. c_str ( ) ) == 0 .
2) Construye el objeto de excepción con what_arg como cadena explicativa. Después de la construcción, std:: strcmp ( what ( ) , what_arg ) == 0 .
3) Constructor de copia. Si * this y other tienen ambos tipo dinámico std::format_error entonces std:: strcmp ( what ( ) , other. what ( ) ) == 0 . Ninguna excepción puede ser lanzada desde el constructor de copia.

Parámetros

what_arg - cadena explicativa
other - otro objeto de excepción a copiar

Excepciones

1,2) Puede lanzar std::bad_alloc .

Notas

Debido a que copiar std::format_error no está permitido lanzar excepciones, este mensaje normalmente se almacena internamente como una cadena con conteo de referencias asignada por separado. Esta es también la razón por la cual no hay un constructor que tome std::string&& : tendría que copiar el contenido de todas formas.

Una clase de excepción estándar derivada debe tener un constructor de copia públicamente accesible. Puede estar implícitamente definido siempre que las cadenas explicativas obtenidas por what() sean las mismas para el objeto original y el objeto copiado.

std::format_error:: operator=

format_error & operator = ( const format_error & other ) noexcept ;
(constexpr desde C++26)

Asigna los contenidos con los de other . Si * this y other ambos tienen tipo dinámico std::format_error entonces std:: strcmp ( what ( ) , other. what ( ) ) == 0 después de la asignación. Ninguna excepción puede ser lanzada desde el operador de asignación de copia.

Parámetros

other - otro objeto de excepción a asignar

Valor de retorno

* this

Notas

Una clase de excepción estándar derivada debe tener un operador de asignación de copia públicamente accesible. Puede estar definido implícitamente siempre que las cadenas explicativas obtenidas por what() sean las mismas para el objeto original y el objeto copiado.

Heredado de std:: exception

Funciones miembro

[virtual]
destruye el objeto de excepción
(función miembro pública virtual de std::exception )
[virtual]
devuelve una cadena explicativa
(función miembro pública virtual de std::exception )

Notas

Macro de prueba de características Valor Std Característica
__cpp_lib_constexpr_exceptions 202502L (C++26) constexpr tipos de excepción

Ejemplo

#include <format>
#include <print>
#include <string_view>
#include <utility>
int main()
{
    try
    {
        auto x13{37};
        auto args{std::make_format_args(x13)};
        std::ignore = std::vformat("{:()}", args); // lanza excepción
    }
    catch(const std::format_error& ex)
    {
        std::println("{}", ex.what());
    }
}

Salida posible:

format error: failed to parse format-spec

Véase también