2011-11-24 16 views
21

He sobrecargado iguales (incluyendo == y! =) Que comprueba si dos objetos son iguales y luego devuelve un valor booleano.C++ bool devuelve 0 1 en lugar de verdadero falso

Desafortunadamente, imprime 0 o 1. Sé que es correcto, pero no puedo encontrar la manera de hacerlo para imprimir verdadero o falso para fines de legibilidad.

incluso he intentado:

if (a.equals(b)) 
{ 
    return true; 
} 

return false; 

Sin embargo, C++ es lo suficientemente tenaz para dar salida a 0 ó 1.

Cualquier ayuda sería apreciada.

Editar - impresión se realiza:

cout << "a == b is " << (a == b) << endl; 

salida deseada es

a == b es verdadera

+4

¿Cómo estás _printing_ ella? – SLaks

+0

alguien me corrige si estoy equivocado pero no es booleano solo una enumeración uint? – dubvfan87

+0

@dubvfan no, 'sizeof (bool) == 1' en mi plataforma, por lo que no' uint'. Pero en realidad son solo 1 y 0 debajo. –

Respuesta

42

Puede utilizar std::boolalpha:

Conjuntos la bandera de formato boolalpha para la corriente str.

Cuando se establece el indicador de formato boolalpha, los valores bool son insertados/extraídos como sus nombres: verdadero y falso en lugar de los valores integrales .

Este indicador se puede desconfigurar con el manipulador noboolalpha.

El indicador boolalpha no se establece en las transmisiones estándar en la inicialización.

std::cout.setf(std::ios::boolalpha); 
std::cout << true; 

o

std::cout << std::boolalpha << true; 
6

Es necesario utilizar std::boolalpha:

cout << boolalpha << yourthing() << endl; 
6

Es necesario utilizar std::boolalpha para imprimir verdadero/falso:

#include <iostream> 

int main() 
{ 
    std::cout << std::boolalpha << true << std::endl; 
} 
0

Si necesita hacer esto fuera de una salida de flujo de <<, es un simple expresión ternaria:

std::string str = (a == b) ? "true" : "false"; 
Cuestiones relacionadas