c++ - bool 条件赋值

标签 c++ c

可以这样在 C 中模拟 bool 值:

int success;
success = (errors == 0 && count > 0);
if(success)
   ...

使用 stdbool.h 可以完成以下操作:

bool success;
success = (errors == 0 && count > 0) ? true : false;
if(success)
   ...

据我所知,逻辑运算符和比较运算符应该返回 1 或 0。 此外,应定义 stdbool.h 常量,以便 true == 1false == 0

因此以下应该有效:

bool success;
success = (errors == 0 && count > 0);
if(success)
   ...

它确实适用于我测试过的编译器。但是假设它是可移植代码是否安全? (假设 stdbool.h 存在)

C++ 编译器的情况是否不同,因为 bool 是内部类型?

最佳答案

假设是安全的。在 C99 中,在转换为 _Bool 类型时,所有非零值都将转换为 1。这在 C99 标准的第 6.3.1.2 节中有描述。相等和关系运算符(例如 ==>= 等)也保证会产生 1 或 0。这在 6.5.8 和 6.5.9 节中有描述。

对于 C++,bool 类型是一个真正的 bool 类型,其中值被转换为 truefalse 而不是 1 或 0,但是将 == 操作等的结果分配给 bool 并期望它起作用仍然是安全的,因为关系和比较运算符会产生 bool 无论如何。当 true 转换为整数类型时,它被转换为 1。

关于c++ - bool 条件赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14642096/

相关文章:

c++ - C++ 中 priority_queue 的奇怪的用户定义比较结构错误

找不到逻辑错误

c - 为什么 getaddrinfo() 在函数的输入部分返回一个值?

c - 变量的双重定义

C++ vector 初始化

c++ - 在 C++ 中抛出超出范围的异常

c - 如何使用指针表示法访问二维数组中的结构元素?

c - 为什么我收到段错误 : 11?

c++ - 如何解决此 MISRA c++ 兼容警告

c++ - 当一个参数是函数的返回值时调用 pow() 时出现链接器错误