【发布时间】:2011-05-15 15:24:24
【问题描述】:
许多编译器似乎只在 bool 值中保留 0 或 1,但我不确定这是否总是有效:
int a = 2;
bool b = a;
int c = 3 + b; // 4 or 5?
【问题讨论】:
-
对于 C++ 部分,请参阅 [我可以为任何 C++ 编译器假设 (bool)true == (int)1 吗? ](stackoverflow.com/questions/2725044/…)。对于 C,请参阅 [布尔是原生 C 类型吗? ](stackoverflow.com/questions/1608318/is-bool-a-native-c-type)。
-
我对“布尔 表达式 是否总是保证评估为 0 或 1?”这个问题更感兴趣,答案是明确的 是的
-
在较新的 C 版本中,有一个标准的 bool 类型,只有值 0 和 1,就像在 C++ 中一样。赋值将非零转换为 1。
-
请注意 bool cast 将确保
b为 1。但您仍然可以使用 unions、memset 等技巧将b变为 2。