c++ - boolean 数据类型与整数数据类型来表示真值

标签 c++ c boolean primitive

<分区>

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

最佳答案

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

  1. 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,而不是相反。

  1. 如果您需要存储大量 boolean 值,您可能希望通过仅使用一位来表示该值来优化存储(如果将其存储在 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/

相关文章:

c++ - 功能模板返回类型

android 内部套接字连接因守护进程服务失败

sql - 检查 boolean 假值的快捷方式

c++ - 针对特定于客户的定制的条件编译与运行时检查?

c++ - std::alignas 如何优化程序的性能?

c++ - 我如何在 C++ 中使用 'ToString()' 枚举?

c - 声明一个二维字符数组?

c - 在 h 文件中声明的全局变量和对它们的访问

vba - 经典的 asp boolean 值到字符串语言

r - 为什么 TRUE == "TRUE"在 R 中是 TRUE?