C ++ boolはtrueの代わりに0を返しますfalse

2つのオブジェクトが等しいかどうかをチェックしてブール値を返すequals(==と!=など)をオーバーロードしました。

残念ながら、それは0または1を出力します。私はそれが正しいことを知っていますが、わかりやすくするためにtrueまたはfalseを印刷する方法を理解できません。

私も試みた:

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

return false;

しかし、C ++は0または1を出力するのに十分なほど頑丈です。

どんな助けもありがとう。

編集 - 印刷が完了しました:

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

必要な出力は

a == bは真

22
@ dubvfan87 C ++には基本的なブール型があり、そのサイズは標準で指定されていません。また、 int のように振る舞いますが、 boolに渡し、それでも == true で等しいかどうかをテストします。 追加された 著者 HostileFork,
@SethCarnegie私は違いが表示されません。ブールに任意の値を割り当てることができ、それが "真実"に変換された場合、そのブールを true に対してテストすることができます。ただし、割り当てられたものと同じテストは行われません。これは、Cの日からboolを実装するために使用される種類のトリックとは異なります。次のコードは "b == true"のみを出力します: bool b = 34; if(b == 34){cout << "b == 34" << endl; } if(b == true){cout << "b == true" << endl; }
追加された 著者 HostileFork,
あなたは印刷していますか?
追加された 著者 SLaks,
私のプラットフォームでは uint ではなく、@dubvfan no、 sizeof(bool)== 1 しかし、彼らは実際には1と0の下にあります。
追加された 著者 Seth Carnegie,
@HostileForkしかし、約34?または1 << 9(違いがわかります)
追加された 著者 Seth Carnegie,
あなたは印刷が言及していますが、あなたのコードには出力するものは何も含まれていません。完全なコードを表示してください。私は出力中にboolがint型にキャストされていると思われます。
追加された 著者 kbyrd,
私は間違っているが誰かが私を修正するが、ブール値ではないuint enum?
追加された 著者 dubvfan87,

4 答え

std :: boolalpha を使用することができます:

strストリームのboolalphaフォーマットフラグを設定します。

     

boolalpha形式フラグが設定されている場合、bool値は   それらの名前として挿入/抽出される:積分ではなく真と偽   値。

     

このフラグはnoboolalphaマニピュレータで設定解除することができます。

     

boolalphaフラグは、初期化時に標準ストリームに設定されていません。

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

または

std::cout << std::boolalpha << true;
44
追加された

std :: boolalpha を使う必要があります:

cout << boolalpha << yourthing() << endl;
6
追加された

true/falseを出力するには、 std :: boolalpha を使用する必要があります。

#include 

int main()
{
  std::cout << std::boolalpha << true << std::endl;
}
6
追加された

If you need to do this outside of a stream output <<, it's a simple ternary expression:

std::string str = (a == b) ? "true" : "false";
0
追加された