Espacios de nombres
Variantes
Acciones

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

De cppreference.com
< cpp‎ | io‎ | basic ios
 
 
Biblioteca de E/S
Manipuladores de E/S
E/S estilo C
Búferes
(en desuso en C++98)
Flujos
Abstracciones
E/S de archivos
E/S de cadenas
E/S de arrays
(en desuso en C++98)
(en desuso en C++98)
(en desuso en C++98)
Salida sincronizada
Tipos
Interfaz de categoría de error
(C++11)
 
 
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.

1) Devuelve un valor que se evalúa como 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.
2) Devuelve 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.

Contenido

[editar] Parámetros

(Ninguno)

[editar] Valor de retorno

1) Un valor que evalúa a 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.
2) true si el flujo no tiene errores, false en caso contrario.

[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