std::basic_ios<CharT,Traits>:: operator bool
|
operator
/* unspecified-boolean-type */
(
)
const
;
|
(1) | (hasta C++11) |
|
explicit
operator
bool
(
)
const
;
|
(2) | (desde C++11) |
Comprueba si el flujo no tiene errores.
Este operador hace posible usar flujos y funciones que devuelven referencias a flujos como condiciones de bucle, resultando en los bucles de entrada idiomáticos de C++ como while ( stream >> value ) { ... } o while ( std:: getline ( stream, string ) ) { ... } . Tales bucles ejecutan el cuerpo del bucle solo si la operación de entrada tuvo éxito.
Contenidos |
Parámetros
(ninguno)
Valor de retorno
Notas
Esta conversión puede utilizarse en contextos donde se espera un bool (por ejemplo, una condición if ). Sin embargo, las conversiones implícitas (por ejemplo, a int ) que pueden ocurrir con bool no están permitidas.
En C++98, operator bool no podía proporcionarse directamente debido a el problema del bool seguro . La solución inicial en C++98 era proporcionar operator void * , que devuelve un puntero nulo si fail ( ) devuelve true o un puntero no nulo en caso contrario. Fue reemplazado por la resolución de LWG issue 468 , que permite que se aplique Safe Bool idiom .
Desde C++11, las funciones de conversión pueden ser explicit . La resolución de LWG issue 1094 introdujo el operador explícito operator bool y la conversión booleana ahora es segura.
Ejemplo
#include <iostream> #include <sstream> int main() { std::istringstream s("1 2 3 error"); int n; std::cout << std::boolalpha << "s is " << static_cast<bool>(s) << '\n'; while (s >> n) std::cout << n << '\n'; std::cout << "s is " << static_cast<bool>(s) << '\n'; }
Salida:
s is true 1 2 3 s is false
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 468 | C++98 | operator void * estaba proporcionado | se proporciona una función de conversión a un tipo booleano no especificado en su lugar |
Véase también
La siguiente tabla muestra el valor de basic_ios accessors ( good() , fail() , etc.) para todas las combinaciones posibles de ios_base::iostate flags:
| ios_base::iostate indicadores |
basic_ios
accesores
|
|||||||
eofbit
|
failbit
|
badbit
|
good() | fail() | bad() | eof() | operator bool | operator! |
| falso | falso | falso | verdadero | falso | falso | falso | verdadero | falso |
| falso | falso | verdadero | falso | verdadero | verdadero | falso | falso | verdadero |
| falso | verdadero | falso | falso | verdadero | falso | falso | falso | verdadero |
| falso | verdadero | verdadero | falso | verdadero | verdadero | falso | falso | verdadero |
| verdadero | falso | falso | falso | falso | falso | verdadero | verdadero | falso |
| true | false | true | false | true | true | true | false | true |
| verdadero | verdadero | falso | falso | verdadero | falso | verdadero | falso | verdadero |
| verdadero | verdadero | verdadero | falso | verdadero | verdadero | verdadero | falso | verdadero |