代码之家  ›  专栏  ›  技术社区  ›  David542

布尔有什么优势?

  •  1
  • David542  · 技术社区  · 3 年前

    _Bool 类型的作用类似于整数,不强制值为true/false或1/0,例如:

    _Bool bools[] = {0,3,'c',0x17};
    printf("%d", bools[2]);
    
    > 1
    

    在那里有什么好处?这仅仅是一种简单的方法来强迫事物看它们如何评价“真实性”,例如:

    printf("%d\n", (_Bool) 3);
    > 1
    

    或者这在C语言中是如何有用的?

    1 回复  |  直到 3 年前
        1
  •  3
  •   tadman    3 年前

    优点是易读,仅此而已。例如:

    bool rb() {
      if (cond && f(y)) {
        return true;
      }
    
      return false;
    }
    

    与:

    int rb() {
      if (cond && f(y)) {
        return 1;
      }
    
      return 0;
    }
    

    这真的没有其他好处。对于那些习惯于在C代码中工作而没有 bool 它主要是化妆品,但是对于C++和它的 布尔

    一如往常,“转换为布尔值”的一种简单方法就是双重否定,如:

    !!3
    

    0 1 价值观。

        2
  •  2
  •   chux - Reinstate Monica    3 年前

    有什么好处 _Bool

    1. a的价值 _布尔 int .

    2. 转换为 _布尔 始终将非零转换为1,并且仅将0转换为0。

    将任何标量值转换为\u Bool时,如果值比较为0,则结果为0;否则,结果为1。

    示例:

    #include <math.h>
    #include <stdlib.h>
    _Bool all_false[] = { 0, 0.0, -0.0, NULL };
    _Bool all_true[] = { 13, 0.1, 42.0, "Hello", NAN };
    

    注意转换/转换到 内景 对; _布尔 : (int) 0.1 -->0,还没有 (_Bool) 0.1 -->1。

    注意转换/转换到 unsigned 对; _布尔 : (unsigned) 0x100000000 -->0,还没有 (_Bool) 0x100000000 -->1。

    1. 增加了布尔运算的清晰度。

    2. _布尔 内景 , char 与…一起使用时 _Generic

    3. 在C99之前,C缺乏 . 许多早期的代码形成了自己的类型 bool, Bool, boolean, bool8, bool_t, ... . 创建新类型 _布尔 使这种普遍但不统一的做法统一起来。 <stdbool.h> 可供使用 bool, true, false <标准刀具h> 不中断,但更新的代码使用更干净的名称。


    OP的例子“不强制值为真/假或1/0”确实强制了这一点 bools[2] 值为1。它没有强制 'c' ,安 内景 ,必须在[0…1]范围内,也不能是类型 _布尔 int x = 12.345; 是允许的。在这两种情况下,都发生了转换。尽管第二个通常会产生警告。

        3
  •  0
  •   Erdal Küçük    3 年前

    想想这个

    (bool) 0.5 -> 1
    ( int) 0.5 -> 0
    

    如您所见,\u Bool的行为不像一个整数。