这个问题,一般都不是问题。 不过细想,还是大有洞天的!
什么是BOOL?mfc中是“typedef int BOOL;”
两者区别在哪里?
首先BOOL的性能更好。用bool来和一个int比较时,会有cast,而BOOL不会有,因为BOOL本身就是一个int。汇编代码上的区别可以参考http://www.codercorner.com/Bools.htm的片段。
但是BOOL会有隐含的bug产生。比如下面
----------------------------------------------------
BOOL l_flag = 2;
// a bunch of code here
if( l_flag == true) // x!
{
}
----------------------------------------------------
BOOL类型的值是0或者non-zero,而bool类型的true或者false是1或者0。然后问题来了,non-zero是不能保证一定等于1的,他可以为任何值。
怎么办?
对于这种条件表达式,都使用implict compare。比如
----------------------------------------------------
BOOL l_flag = 2;
bool l_mark;
// a bunch of code here
if( l_flag)
{
}
if(l_mark)
{
}
----------------------------------------------------
本文参考了http://www.codercorner.com/Bools.htm