Espacios de nombres
Variantes
Acciones

std::ios_base::failure

De cppreference.com
< cpp‎ | io‎ | ios base
 
 
Biblioteca de E/S
Manipuladores de E/S
E/S estilo C
Búferes
(en desuso en C++98)
Flujos
Abstracciones
E/S de archivos
E/S de cadenas
E/S de arrays
(en desuso en C++98)
(en desuso en C++98)
(en desuso en C++98)
Salida sincronizada
Tipos
Interfaz de categoría de error
(C++11)
 
 
Definido en el archivo de encabezado <ios>
class failure;

La clase std::ios_base::failure define un objeto excepción que las funciones de la biblioteca E/S lanzan en caso de error.

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

(desde C++17)
cpp/error/exceptionstd-ios base-failure-2003-inheritance.svg
Acerca de esta imagen

Inheritance diagram

(hasta C++11)
cpp/error/exceptioncpp/error/runtime errorcpp/error/system errorstd-ios base-failure-inheritance.svg
Acerca de esta imagen

Inheritance diagram

(desde C++11)

Contenido

[editar] Funciones miembro

(constructor)
Construye un nuevo objeto de tipo failure con el mensaje dado.
(función miembro pública)
operator=
Reemplaza el objeto failure.
(función miembro pública)
what
Devuelve la cadena aclaratoria.
(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 excepción usando message como cadena aclaratoria que luego se puede recuperar usando what(). ec se utiliza para identificar el motivo específico del error. (desde C++11)
3) Constructor de copia. Inicializa el contenido con el de other. Si tanto *this como other tienen un tipo dinámico std::ios_base::failure, entonces std::strcmp(what(), other.what()) == 0. (desde C++11)

Parámetros

message - Cadena aclaratoria.
ec - Código de error para identificar el motivo específico del error.
other - El otro objeto failure a copiar.

Notas

Debido a que no se permite copiar std::ios_base::failure para generar excepciones, este mensaje generalmente se almacena internamente como una cadena contada por referencia asignada por separado. Esta es también la razón por la que no hay ningún constructor que tome std::string&&: tendría que copiar el contenido de todos modos.

std::ios_base::failure::operator=

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

Asigna el contenido con el de other. Si tanto *this como other tienen el 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 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 aclaratoria.

Parámetros

(Ninguno)

Valor de retorno

Un puntero a una cadena terminada en nulo con información aclaratoria. La cadena es adecuada para convertirse y mostrarse como un std::wstring. Se garantiza que el puntero sea válido al menos hasta que el objeto excepción del cual se obtuvo se destruya, o hasta que una función miembro no const (p. ej., el operador de asignación de copia) se llame en el objeto excepción.

Notas

Se permite, pero no se requiere, que las implementaciones redefinan a what().

Heredado de std::system_error

Member functions

Devuelve el código de error.
(función miembro pública de std::system_error) [editar]
[virtual]
Devuelve una cadena aclaratoria.
(función miembro virtual pública de std::system_error) [editar]

Heredado de std::runtime_error


Heredado de std::exception

Funciones miembro

[virtual]
Destruye el objeto excepción.
(función miembro virtual pública de std::exception) [editar]
[virtual]
Devuelve una cadena aclaratoria.
(función miembro virtual pública de std::exception) [editar]

Heredado de std::runtime_error


Heredado de std::exception

Funciones miembro

[virtual]
Destruye el objeto excepción.
(función miembro virtual pública de std::exception) [editar]
[virtual]
Devuelve una cadena aclaratoria.
(función miembro virtual pública de std::exception) [editar]

[editar] Notas

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

Asunto LWG 363 apunta al mismo defecto y su resolución es agregar throw() a la declaración de {{tt|std::ios_base::failure::~failure()} }. Esa resolución no se aplicó debido al conflicto entre las dos resoluciones.

  1. La especificación de excepción de no lanzamiento 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.

[editar] Ejemplo

#include <iostream>
#include <fstream>
 
int main()
{
    std::ifstream f("doesn't exist");
 
    try
    {
        f.exceptions(f.failbit);
    }
    catch (const std::ios_base::failure& e)
    {
        std::cout << "Se atrapó una excepción de tipo ios_base::failure.\n"
                  << "Cadena aclaratoria: " << e.what() << '\n'
                  << "Código de error: " << e.code() << '\n';
    }
}

Posible salida:

Se atrapó una excepción de tipo ios_base::failure.
Cadena aclaratoria: ios_base::clear: error iostream_category no especificado
Código de error: iostream:1

[editar] Informes de defectos

Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.

ID Aplicado a Comportamiento según lo publicado Comportamiento correcto
LWG 48 C++98 La sobrecarga (1) del constructor inicializaba la clase base std::exception
con msg, pero la clase base no tenía un constructor que coincidiera.
Se eliminó
la descripción correspondiente.
LWG 331 C++98 std::ios_base::failure declaraba un destructor sin throw(). Se eliminó la declaración del destructor.

[editar] Véase también

(C++11)
los códigos IO secuencia de error
Original:
the IO stream error codes
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(enum) [editar]