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.
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.
Contenido |
[editar] Parámetros
(Ninguno)
[editar] Valor de retorno
[editar] 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.
[editar] 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
[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 468 | C++98 | Se proporcionaba operator void*. | En su lugar se proporciona una función de conversión a un tipo booleano no especificado. |
[editar] 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 |