【发布时间】:2011-07-19 04:37:15
【问题描述】:
这种转换的可移植性如何。我可以确定两个断言都通过了吗?
int x = 4<5;
assert(x==1);
x = 4>5;
assert(x==0);
不要问为什么。我知道这很丑。谢谢。
【问题讨论】:
-
你为什么不改变第一个表达式?你可以写
assert(x!=0)。即使 bool(true) 转换为可移植到 int(1),“not false”断言也具有更易读的表达式。 -
为什么不:
assert( 4 < 5);和assert(!( 4 > 5)); -
@harper:使用比较表达式的要求值是完全合理的。
-
@R._ 当问题是 bool 到 int 的转换是否给出了合理的结果时,我不会依赖这个。当作者怀疑此要求是否满足时,读者可能会遇到同样的问题。特别是因为 x 的值不是要检查的条件,而只是一个中间结果。
-
如果我真的需要将布尔值转换为 0 或 1,我可能会写
(4 < 5) ? 1 : 0。一个好的编译器可能会产生相同的机器代码,并且对于人类读者来说更清晰。