2011-11-24 2 views
21

Ho sovraccaricato equamente (incluso == e! =) Che controlla se due oggetti sono uguali e quindi restituisce un valore booleano.Il booster di C++ restituisce 0 1 invece di vero falso

Sfortunatamente, stampa 0 o 1. So che è corretto ma non riesco a capire il modo in cui farlo stampare vero o falso per motivi di leggibilità.

Ho anche provato:

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

return false; 

Tuttavia, C++ è abbastanza testardo per uscita 0 o 1.

Qualsiasi aiuto sarebbe apprezzato.

Edit - Print è fatto:

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

output desiderato è

a == b è vero

+4

Come stai _printing_ esso? – SLaks

+0

qualcuno mi corregge se sbaglio ma non è booleano solo un enint uint? – dubvfan87

+0

@dubvfan no, 'sizeof (bool) == 1' sulla mia piattaforma quindi non' uint'. Ma in realtà sono solo 1 e 0 sotto. –

risposta

42

È possibile utilizzare std::boolalpha:

Sets la bandiera del formato boolalpha per il flusso di str.

Quando il flag boolalpha è impostato, i valori bool sono inseriti/estratti come i loro nomi: true e false invece dei valori integrali.

Questo flag può essere disinserito con il manipolatore noboolalpha.

Il flag boolalpha non è impostato negli stream standard all'inizializzazione.

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

o

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

è necessario utilizzare std::boolalpha:

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

È necessario utilizzare std::boolalpha stampare vero/falso:

#include <iostream> 

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

Se avete bisogno di fare questo al di fuori di un'uscita flusso <<, si tratta di una semplice espressione ternaria:

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