我有时会发现在整数表达式中使用bool可以缩短代码。 例如,我更喜欢
int n_items = has_a + has_b + has_box * 5;
在
int n_items = (has_a ? 1 : 0) + (has_b ? 1 : 0) + (has_box ? 5 : 0);
这应该是安全的,因为false == 0和true == 1。是否应该知道任何风险或陷阱?
对于bool,我指的是C99 bools或像a>b
这样的布尔表达式。当然,我必须注意实际上不是布尔值的值,比如isdigit()
的返回值。
答案 0 :(得分:4)
bool
的风险之一是它的语义与int
不同,很多程序已使用bool
作为int
的别名,并且未使用来自_Bool
的C99 stdbool.h
typedef(例如,为C89开发或旨在兼容的程序):
typedef int bool;
然后这个表达式可能有不同的含义:
int a = (bool) 0.5; // if bool is _Bool, evaluates to 1
// if bool is int, evaluates to 0
这可能会产生一些非常讨厌的错误。
另一方面,比(has_a ? 1 : 0)
更短的形式是惯用!!has_a
。