【C++小细节】bool值判别式的(有可能会)错误写法

今天在学习win32 API,在它的数据类型介绍文档里看到了这样一句话

BOOL is a type alias for int, distinct from C++'s bool

意思就是说,在win32 API的框架里,BOOL类型其实是int类型的“别名”,是一个伪装成bool的int。
文档里给出了这样一个例子

正确写法

if (SomeFunctionThatReturnsBoolean()) 
{ 
    ...
}

// or

if (SomeFunctionThatReturnsBoolean() != FALSE)
{ 
    ...
}

错误写法

if (result == TRUE) // Wrong!
{
    ... 
}

就是说,假如你定义了一个 返回值是BOOL类型的函数,然后想要在if语句里使用这个函数,那么你写if(function()!= FALSE)是对的,但是写if(function()==TRUE)就是错的!
原因是这个function()的返回值表面上是bool实际上是int,它返回的值不仅限于0和1,有可能返回的值是1433223,这个时候,如果你采用if(function()!= FALSE)的写法,那么你依然可以把这个返回值当作bool值处理,因为不管是不是bool,function()!= FALSE这个表达式的值都是一样的,当function()返回值不为0时,表达式的值通通是1。但是如果你采用if(function()==TRUE)的写法,那就不一样了。

当然,这个问题只有在你使用win32api的时候才会出现,原生的C++代码是不会有这个问题的。但是,既然win32api会出现这种情况,那么当我以后使用其他平台开发的时候,会不会也出现这种情况呢?既然这样,不如现在就养成习惯,抛弃if(function()==TRUE)的写法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白草遥遥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值