可以这样在 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 == 1
和 false == 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 类型,其中值被转换为 true
或 false
而不是 1 或 0,但是将 ==
操作等的结果分配给 bool
并期望它起作用仍然是安全的,因为关系和比较运算符会产生 bool
无论如何。当 true
转换为整数类型时,它被转换为 1。
关于c++ - bool 条件赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14642096/