std::basic_ios<CharT,Traits>::operator bool
operator /* tipo-booleano-no-especificado */() const; |
(1) | (hasta C++11) |
explicit operator bool() const; |
(2) | (desde C++11) |
Comprueba si el flujo no tiene errores.
false en un contexto booleano si fail() devuelve true; de lo contrario, devuelve un valor que se evalúa como true en un contexto booleano.true si el flujo no tiene errores y está listo para operaciones de E/S. Específicamente, devuelve !fail().Este operador permite usar flujos y funciones que devuelven referencias a flujos como condiciones de bucle, lo que da como resultado los bucles de entrada idiomáticos de C++, como while (flujo >> value) {...} o while (std::getline(flujo, string)) {...}. Dichos bucles ejecutan el cuerpo del bucle solo si la operación de entrada tuvo éxito.
Parámetros
(Ninguno)
Valor de retorno
true en un contexto booleano si el flujo no tiene errores, un valor que evalúa a false en un contexto booleano en caso contrario.true si el flujo no tiene errores, false en caso contrario.Notas
Esta conversión se puede utilizar en contextos en los que se espera un bool (p. ej. una condición if). Sin embargo, no se permiten conversiones implícitas (p. ej. a int) que pueden ocurrir con bool.
En C++98, no se podía proporcionar directamente operator bool debido al problema del booleano seguro. La solución inicial en C++98 es proporcionar operator void*, que devuelve un puntero nulo si fail() devuelve true o un puntero no nulo en caso contrario. Se reemplaza por la resolución de Asunto LWG 468, que permite aplicar el Idioma del booleano seguro.
Desde C++11, las funciones de conversión pueden ser explicit. La resolución de Asunto LWG 1094 introdujo el operator bool explícito 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 es " << static_cast<bool>(s) << '\n';
while (s >> n)
std::cout << n << '\n';
std::cout << "s es " << static_cast<bool>(s) << '\n';
}
Salida:
s es true
1
2
3
s es false
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 468 | C++98 | Se proporcionaba operator void*.
|
En su lugar se proporciona una función de conversión a un tipo booleano no especificado. |
Véase también
| ios_base::iostate flags | basic_ios accessors | |||||||
| eofbit | failbit | badbit | good() | fail() | bad() | eof() | operator bool() | operator!() |
| false | false | false | true | false | false | false | true | false |
| false | false | true | false | true | true | false | false | true |
| false | true | false | false | true | false | false | false | true |
| false | true | true | false | true | true | false | false | true |
| true | false | false | false | false | false | true | true | false |
| true | false | true | false | true | true | true | false | true |
| true | true | false | false | true | false | true | false | true |
| true | true | true | false | true | true | true | false | true |