C++ bool връща 0 1 вместо true false

Имам претоварени равни (включително == и !=), които проверяват дали два обекта са равни и след това връща булево значение.

За съжаление, той отпечатва 0 или 1. Знам, че е правилно, но не мога да разбера начина, по който да го накарам да отпечата true или false за целите на четливостта.

Дори опитах:

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

return false;

C++ обаче е достатъчно упорит, за да изведе 0 или 1.

Всяка помощ ще бъде оценена.

Редактиране - Отпечатването е готово:

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

Желаният изход е

a == b е вярно


person xBlue    schedule 24.11.2011    source източник
comment
някой да ме поправи, ако греша, но не е ли boolean просто uint enum?   -  person dubvfan87    schedule 24.11.2011
comment
@dubvfan не, sizeof(bool) == 1 на моята платформа, така че не uint. Но те наистина са само 1 и 0 отдолу.   -  person Seth Carnegie    schedule 24.11.2011
comment
Споменавате печат, но вашият код не включва нищо, което би извело. Моля, покажете ни пълния код. Подозирам, че ти си bool се прехвърля към int по време на изхода.   -  person kbyrd    schedule 24.11.2011
comment
@dubvfan87 C++ има основен булев тип, чийто размер не е определен от стандарта...и въпреки че може да изглежда, че се държи като int, той не е такъв...можете да присвоите 35 на bool и пак ще тест за равенство с == true. stackoverflow.com/questions/356726 /   -  person HostileFork says dont trust SE    schedule 24.11.2011
comment
@HostileFork, но какво да кажем за 34? Или 1 ‹‹ 9 (Виждате разликата)   -  person Seth Carnegie    schedule 24.11.2011
comment
@SethCarnegie Не виждам разликата. Можете да присвоите произволна стойност на bool и ако тя се преобразува в истина, можете да тествате този bool срещу true и ще работи. Той обаче няма да тества като равен на това, което сте му присвоили. Това е различно от видовете трикове, използвани за внедряване на bool от дните на C. Следният код отпечатва само b == true: bool b = 34; if (b == 34) { cout << "b == 34" << endl; } if (b == true) { cout << "b == true" << endl; }   -  person HostileFork says dont trust SE    schedule 25.11.2011


Отговори (4)


Можете да използвате std::boolalpha:

Задава флага за формат boolalpha за потока str.

Когато флагът за формат boolalpha е зададен, стойностите на bool се вмъкват/извличат като техните имена: true и false вместо интегрални стойности.

Този флаг може да бъде деактивиран с манипулатора noboolalpha.

Флагът boolalpha не е зададен в стандартните потоци при инициализация.

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

or

std::cout << std::boolalpha << true;
person Luchian Grigore    schedule 24.11.2011

Трябва да използвате std::boolalpha:

cout << boolalpha << yourthing() << endl;
person John Zwinck    schedule 24.11.2011

Трябва да използвате std::boolalpha, за да отпечатате true/false :

#include <iostream>

int main()
{
  std::cout << std::boolalpha << true << std::endl;
}
person BЈовић    schedule 24.11.2011

Ако трябва да направите това извън изходен поток <<, това е прост троичен израз:

std::string str = (a == b) ? "true" : "false";
person Mark Ransom    schedule 13.11.2017