Namespaces
Variants

std::ios_base:: failure

From cppreference.net
Definido en el encabezado <ios>
class failure ;

La clase std::ios_base::failure define un objeto de excepción que es lanzado ante fallos por las funciones en la biblioteca de Entrada/Salida.

std::ios_base::failure puede definirse como una clase miembro de std::ios_base o como un sinónimo (typedef) para otra clase con funcionalidad equivalente.

(desde C++17)
cpp/error/exception std-ios base-failure-2003-inheritance.svg

Diagrama de herencia

(hasta C++11)
cpp/error/exception cpp/error/runtime error cpp/error/system error std-ios base-failure-inheritance.svg

Diagrama de herencia

(desde C++11)

Contenidos

Funciones miembro

(constructor)
construye un nuevo objeto failure con el mensaje dado
(función miembro pública)
operator=
reemplaza el objeto failure
(función miembro pública)
what
devuelve la cadena explicativa
(función miembro pública)

std::ios_base::failure:: failure

(1)
explicit failure ( const std:: string & message ) ;
(hasta C++11)
explicit failure ( const std:: string & message,
const std:: error_code & ec = std:: io_errc :: stream ) ;
(desde C++11)
explicit failure ( const char * message,
const std:: error_code & ec = std:: io_errc :: stream ) ;
(2) (desde C++11)
(3)
failure ( const failure & other ) ;
(hasta C++11)
failure ( const failure & other ) noexcept ;
(desde C++11)
1,2) Construye el objeto de excepción usando message como cadena explicativa que puede recuperarse posteriormente usando what() . ec se usa para identificar la razón específica del fallo. (desde C++11)
3) Constructor de copia. Inicializa los contenidos con los de other . Si * this y other tienen ambos tipo dinámico std::ios_base::failure entonces std:: strcmp ( what ( ) , other. what ( ) ) == 0 . (desde C++11)

Parámetros

message - cadena explicativa
ec - código de error para identificar la razón específica del fallo
other - otro failure a copiar

Notas

Debido a que copiar std::ios_base::failure 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.

std::ios_base::failure:: operator=

failure & operator = ( const failure & other ) ;
(hasta C++11)
failure & operator = ( const failure & other ) noexcept ;
(desde C++11)

Asigna los contenidos con los de other . Si * this y other ambos tienen tipo dinámico std::ios_base::failure entonces std:: strcmp ( what ( ) , other. what ( ) ) == 0 después de la asignación. (desde C++11)

Parámetros

other - otro objeto de excepción con el cual asignar

Valor de retorno

* this

std::ios_base::failure:: what

virtual const char * what ( ) const throw ( ) ;
(hasta C++11)
virtual const char * what ( ) const noexcept ;
(desde C++11)

Devuelve la cadena explicativa.

Valor de retorno

Puntero a una cadena terminada en nulo definida por la implementación con información explicativa. La cadena es adecuada para conversión y visualización como std::wstring . Se garantiza que el puntero será válido al menos hasta que se destruya el objeto de excepción del cual se obtiene, o hasta que se llame a una función miembro no constante (por ejemplo, el operador de asignación de copia) en el objeto de excepción.

Notas

Las implementaciones pueden, pero no están obligadas, a sobrescribir what() .

Heredado de std:: system_error

Funciones miembro

devuelve el código de error
(función miembro pública de std::system_error )
[virtual]
devuelve una cadena explicativa
(función miembro pública virtual de std::system_error )

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

Antes de la resolución de LWG issue 331 , std::ios_base::failure declaraba un destructor sin throw ( ) , mientras que std::exception::~exception() se declaraba con throw ( ) [1] . Esto significa que std::ios_base::failure::~failure() tenía una especificación de excepciones más débil. La resolución consiste en eliminar esa declaración para mantener la especificación de excepciones no lanzadora.

LWG issue 363 aborda el mismo defecto y su resolución es agregar throw ( ) a la declaración de std::ios_base::failure::~failure() . Dicha resolución no fue aplicada debido al conflicto entre las dos resoluciones.

  1. La especificación de excepción no lanzadora ahora se aplica globalmente en toda la biblioteca estándar , por lo que los destructores de las clases de la biblioteca estándar no se declaran con throw ( ) o noexcept .

Ejemplo

#include <fstream>
#include <iostream>
int main()
{
    std::ifstream f("doesn't exist");
    try
    {
        f.exceptions(f.failbit);
    }
    catch (const std::ios_base::failure& e)
    {
        std::cout << "Caught an ios_base::failure.\n"
                  << "Explanatory string: " << e.what() << '\n'
                  << "Error code: " << e.code() << '\n';
    }
}

Salida posible:

Caught an ios_base::failure.
Explanatory string: ios_base::clear: unspecified iostream_category error
Error code: iostream:1

Informes de defectos

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

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 48 C++98 la sobrecarga del constructor (1) inicializaba la clase base std::exception
con msg , pero la clase base no tiene un constructor coincidente
descripción correspondiente
eliminada
LWG 331 C++98 std::ios_base::failure declaraba un destructor sin throw ( ) eliminó la declaración del destructor

Véase también

(C++11)
los códigos de error de flujo de E/S
(enum)