布尔数据类型与整数数据类型来表示真值

Boolean data type vs integer data types to represent truth values

使用 bool 数据类型比使用整数值 0 和 1 表示真值和假值有什么优势,使用起来效率更高? 它在不同语言(如 c 和 c++)中有何不同?

为了节省内存,强烈建议使用 BOOL,例如,如果我们只是检查条件(true 或 false)或类似的东西。

布尔仅占用 1 个字节(通常是最小可寻址大小)内存,而整数可能占用 2 或 4 个字节或更多,具体取决于编译器。

因此,非常建议使用 bool 而不是 integer 来仅存储 1 或 0。如果可以在更少的内存中这样做,为什么要浪费内存。

并且bool可以保证只有0或1的值。所以它适合条件语句。

int在没有bool的情况下在C中使用,没有优势1在C++中使用整数类型表示布尔值或者在现代 C 中:

  1. bool是有意义的,int不是:
bool try_something();
int try_something(); // What does this return?

在 C 语言中使用 returning int 来指示成功或失败是很常见的,但是很多(大多数?)这些并不 return 1 成功时 0 失败时,它们遵循 UNIX 标准,成功时为 return 0 ,错误时为其他内容,因此您会得到如下代码:

int close(int fd);

if (close(fd)) { /* Something bad happened... */ }

参见 close 手册,其中 returns 0 成功,-1 失败。对于新用户,此代码令人不安,您希望 close 到 return 如果成功则为真,而不是相反。

  1. 如果您需要存储大量布尔值,您可能希望通过仅使用一位来表示该值来优化存储(如果将其存储在 int 中则需要 32 位),并且在 C++ 中,std::vector<bool>2 已经专门用于执行此操作,因此:
std::vector<bool> bvec(8000); // Size ~ 1000 bytes (optimization of std::vector<bool>)
std::vector<int> ivec(8000);  // Size ~ 32000 bytes (32-bits int)

1 如果以相同的方式使用它们(例如,通过 bool b = f();int b = f(); 或上面的 vector<bool>(如果你可以用 bool 替换 int 而没有问题,那么就这样做),但是如果你使用 int 来存储多个布尔值使用按位运算,这是另一个问题。

2注意这里只适用于std::vector<bool>,其他容器如std::array<bool, N>没有优化,因为不能使用proxy反对 "represent" 位值。

bool - 内置布尔类型。布尔值可以有值 truefalse.

因此,如果您有一个 boolean 类型有意义的场景,例如 flagreturn 值表示 yes/nosuccess/failure, 你会考虑使用 bool.

但是如果您有多个这样的值,则使用 int(s) 会更合适。 bool 不合适,因为涉及的值应限制为 true/false.

这主要是风格问题,所以很难证明一种方法是正确的。 C 允许语法 if(x) 如果 x 非零则执行条件。所以 "true" 可能有点陷阱, if(x == true) 并不总是你想的那样。另一方面,在像 is_valid() 这样的函数中,return truereturn 1 清晰得多。 bool 可以提高内存效率,但这可能是一种错觉,出于效率原因,它通常被填充到四个字节。

bool 的主要问题是

,虽然这又是风格问题
mywdgt = openwidget("canvaswidget", 256, 256, true);

显然意味着打开或创建一个小部件,它是一个 canvas,并且是 256 x 256 像素。但是最后一个参数是什么?

mywdgt = openwidget("canvaswidget", 256, 256, ALLOW_ALPHA);

清晰多了。你知道参数是什么以及它的作用,在 一眼。所以在函数签名中应该避免 bool 参数, 请改用定义并说出标志的含义。