<分区>
使用 bool 数据类型比整数值有什么优势,例如 0 和 1 表示真值和假值,使用起来效率更高? 它在不同语言(如 C 和 C++)中有何不同?
<分区>
使用 bool 数据类型比整数值有什么优势,例如 0 和 1 表示真值和假值,使用起来效率更高? 它在不同语言(如 C 和 C++)中有何不同?
最佳答案
int
在没有 bool
的情况下在 C 中使用,没有优势1 在 C++ 或现代 C 中使用整数类型表示 boolean 值:
bool
是有意义的,int
不是:bool try_something();
int try_something(); // What does this return?
在 C 中,返回 int
来指示成功或失败是很常见的,但是很多(大多数?)这些在成功时不返回 1
,在失败时不返回 0
,它们遵循 UNIX 标准,即返回 0
以防万一成功和其他错误情况下的其他东西,所以你得到这样的代码:
int close(int fd);
if (close(fd)) { /* Something bad happened... */ }
参见 close 手册,成功返回 0
,失败返回 -1
。对于新用户,此代码令人不安,您希望 close
在成功时返回 true,而不是相反。
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>
(如果您可以将 int
替换为 bool
而没有问题代码,然后这样做)),但是如果您使用 int
通过按位运算存储多个 boolean 值,这是另一个问题。
2 请注意,这仅适用于 std::vector<bool>
,其他容器如 std::array<bool, N>
未优化,因为它们不能使用代理对象来“表示”位值。
关于c++ - boolean 数据类型与整数数据类型来表示真值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39631231/