【问题标题】:Why does bool exist when we can use int?当我们可以使用 int 时,为什么 bool 存在?
【发布时间】:2019-09-06 21:36:01
【问题描述】:

这听起来可能是一个非常愚蠢的问题。但是这几天一直困扰着我。而且它不仅与 C++ 编程语言有关,因为我已经添加了它的标签。我的问题是这样的。在计算机科学中,布尔 (bool) 数据类型只有两个可能的值。 '对或错'。而且,在计算机科学中,1 为真,0 为假。那么为什么布尔值存在呢?为什么不使用一个只能返回两个可能值的整数,比如 1 或 0。

例如:

bool mindExplosion = true; // true!
int mindExplosion = 1; // true!!
// or we can '#define true 1' and it's the same right?

我错过了什么?

【问题讨论】:

  • 抛开实际考虑,如果我正在阅读某人的代码并看到声明了 bool 变量,这立即告诉我他们希望它只有两个可能的值。如果他们将其声明为int,那么现在我将不得不深入研究代码,然后才能意识到他们正在(错误地)将该变量用作某种布尔值。拥有这样的代码,并且只做它所说的,可以为其他程序员节省相当多的时间:)
  • 人们也可以问“如果我们有 int,为什么还要有 char 类型?`。毕竟,字符编码是数字。
  • 您可以指望false 为0。另一方面,truenot false,无论这意味着整数。例如 -1 是真的吗? 5是真的吗?那么,如果您期望 1 为真,但整数为 5,那么表达式是否为真?
  • 抑制了好奇心。我现在明白了。
  • 仅供参考,bool 并不总是存在!早在过去,人们实际上确实使用整数作为布尔值。 bool 是后来添加的,它只是让事情变得更容易。

标签: c++ boolean


【解决方案1】:

当我们可以使用 int 时,为什么 bool 存在?

好吧,您不需要像 int 这样大的东西来表示两种状态,因此允许使用较小的类型以节省空间是有意义的

我们为什么不使用只能返回两个可能值的整数,例如 1 或 0。

bool 正是如此。 It is an unsigned integer type that represents true (1) or false (0).


为此使用特定类型的另一个好处是它无需任何文档即可表达意图。如果我们有一个类似(警告,非常做作的例子)的函数

void output(T const & val, bool log)

很容易看出 log 是一个选项,如果我们传递 false 它不会记录。如果是的话

void output(T const & val, int log)

然后我们不确定它的作用。它是否要求日志级别?关于是否记录的标志?还有什么?

【讨论】:

    【解决方案2】:

    我错过了什么?

    表现力。

    当变量被声明为int 时,它可能使用仅用于0 和1,或者它可能包含INT_MIN..INT_MAX 中的任何内容。

    当一个变量被声明为bool时,它显式表示它要保存一个真/假值。

    除其他外,这允许编译器在您真正需要bool 的地方使用int 时抛出警告,或者尝试将2 存储在bool 中。编译器是你的朋友;给它所有可能的提示,这样它就可以告诉你你的代码什么时候开始看起来很时髦。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-04
      • 1970-01-01
      • 2014-03-17
      • 2017-02-04
      • 1970-01-01
      • 2017-02-03
      • 2010-11-21
      • 2023-03-15
      相关资源
      最近更新 更多