std::ios_base::failure
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.
|
(desde C++17) |
(hasta C++11) | |
(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) | |
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 )
| |
[virtual] |
Devuelve una cadena aclaratoria. (función miembro virtual pública de std::system_error )
|
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 )
|
[virtual] |
Devuelve una cadena aclaratoria. (función miembro virtual pública de std::exception )
|
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 )
|
[virtual] |
Devuelve una cadena aclaratoria. (función miembro virtual pública de std::exception )
|
[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.
- ↑ 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) |