|
double a;
……
if (0 = a) {
……
这段代码错了吗?如果是C++,它可能是正确的!
一个提示是:任何语言里面都不要去直接判断一个浮点数是否等于零,而是应该判断这个浮点数与零的差的绝对值是否小于某一个精度。永远记住浮点数只能比较大于、小于,不能直接比较等于。除非……
是的,这里“=”被重载了,因为这样写起来、读起来更符合逻辑。所以,另一个提示是:总是把常数写在左边。
double a, b;
……
if (a = b)
错了吗?永远为真?该死的注释呢,“=”是否被重载了?
也许你习惯了重载过的“=”而忽视了这个细节,也许你在面试的过程中发现别人“好像”是犯了个低级错误。当然有的人喜欢重载“==”,不过我觉得还是重载“=”好,至少常数写在左边且没引用到浮点数重载的头文件时,编译器会报错。
Every program in paper is a fake, test it. |
|