【发布时间】:2015-11-09 19:09:58
【问题描述】:
bool bVal;
int a = 5;
int b = 2;
bVal = (bool)a>b;
声明bVal =a>b; 是否可接受。当然,这对我来说很好用。
但我看到人们使用这样的东西:
#define CHECK_bIsTrue(value) ((value) ? TRUE : FALSE)
如果只是布尔值,为什么还要使用三元运算符?
【问题讨论】:
-
bVal = (bool)a>b;是错误的(在这里会给出错误的结果),但bVal = a>b;是正确的。 -
我认为
#define宏将真实值(任何值!= 0)“标准化”为 TRUE。如果value已经是布尔值,这似乎是多余的。 -
@vigneswaran j 有时,表达式必须恰好返回 1 或 0。考虑例如按位与运算符 x & 8。如果确实设置了相应的位,则表达式不会返回 1。
-
您也可以使用
!!(<some expression>)(例如!!(x & 8))将结果折叠为0或1。虽然它有点神秘。 -
bVal = (bool)a>b;表示bVal = ((bool)a)>b;所以它不会返回正确的结果。
标签: c conditional-statements ternary-operator