Namespaces
Variants

std::basic_ios<CharT,Traits>:: operator bool

From cppreference.net
operator /* unspecified-boolean-type */ ( ) const ;
(1) (hasta C++11)
explicit operator bool ( ) const ;
(2) (desde C++11)

Comprueba si el flujo no tiene errores.

1) Retorna un valor que se evalúa como false en un contexto booleano si fail ( ) retorna true , de lo contrario retorna un valor que se evalúa como true en un contexto booleano.
2) Devuelve true si el flujo no tiene errores y está listo para operaciones de E/S. Específicamente, devuelve ! fail ( ) .

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

1) Un valor que se evalúa como true en un contexto booleano si el flujo no tiene errores, un valor que se evalúa como false en un contexto booleano en caso contrario.
2) true si el flujo no tiene errores, false en caso contrario.

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