【问题标题】:C++ bool returns 0 1 instead of true falseC++ bool 返回 0 1 而不是 true false
【发布时间】:2012-01-05 21:29:05
【问题描述】:

我重载了 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 为真

【问题讨论】:

  • 如果我错了,有人纠正我,但布尔值不只是一个 uint 枚举吗?
  • @dubvfan 不,sizeof(bool) == 1 在我的平台上,所以不是uint。但它们实际上只是下面的 1 和 0。
  • 您提到了打印,但您的代码不包含任何可以输出的内容。请向我们展示完整的代码。我怀疑你的 bool 在输出期间被强制转换为 int。
  • @dubvfan87 C++ 有一个基本的布尔类型,其大小未由标准指定......虽然它可能看起来像 int,但它不是一个......你可以将 35 分配给布尔值,它仍然会测试与 == true 的相等性。 stackoverflow.com/questions/356726/…
  • @SethCarnegie 我看不出有什么区别。您可以为 bool 分配任何值,如果它转换为“真”,那么您可以针对 true 测试该 bool,它会起作用。但是,它不会像您分配给它的那样进行测试。这与 C 时代用于实现 bool 的各种技巧不同。以下代码仅打印“b == true”:bool b = 34; if (b == 34) { cout &lt;&lt; "b == 34" &lt;&lt; endl; } if (b == true) { cout &lt;&lt; "b == true" &lt;&lt; endl; }

标签: c++ overloading boolean


【解决方案1】:

你可以使用std::boolalpha:

为 str 流设置 boolalpha 格式标志。

当设置了 boolalpha 格式标志时,bool 值是 插入/提取为他们的名字:真假而不是整数 价值观。

可以使用 noboolalpha 操纵器取消设置此标志。

boolalpha 标志未在初始化时在标准流中设置。

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

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

【讨论】:

    【解决方案2】:

    你需要使用std::boolalpha:

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

    【讨论】:

      【解决方案3】:

      你需要使用std::boolalpha来打印真/假:

      #include <iostream>
      
      int main()
      {
        std::cout << std::boolalpha << true << std::endl;
      }
      

      【讨论】:

        【解决方案4】:

        这直接修复了它

        std::cout << std::boolalpha << "a == b is " << (a == b) << '\n';
        
        

        有了它,它涵盖了它一般而不重复 std::boolalpha

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

        【讨论】:

          【解决方案5】:

          如果您需要在流输出&lt;&lt; 之外执行此操作,这是一个简单的三元表达式:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-02-21
            • 2015-06-21
            • 2020-03-15
            • 2013-07-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多