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 |