std::ios_base:: failure
|
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.
|
|
(desde C++17) |
|
Diagrama de herencia |
(hasta C++11) |
|
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) | |
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:: runtime_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.
- ↑ 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) |