概述
if语句是最常用的语句,但很多时候容易用隐含的错误方式书写。最常见的就是变量与零值的比较。
布尔类型
布尔类型的定义: 0为“假”,任何非0值都为“真”。true 表示“真”, false表示“假”,对于true的值并没有什么统一的标准。看下面代码实例部分:
/// 这些都是关于布尔类型的if的不良写法,尤其是跟true、false值去比较
if(bFlag != true)
if(bFlag == false)
if(bFlag != 1)
if(bFlag == 0)
// 正统写法
if(bFlag) // 表示bFlag为真
if(!bFlag) // 表示bFlag为假
整型类型
整型就是跟零值去比较,因为false的值是确定的。
if(nValue == 0) // 整型 nValue 为零
if(nValue != 0) // 整型 nValue 不为零
浮点数类型
浮点数都会有一个精度限制,超过精度的部分会被截取掉,因此本来不相等的两个浮点数可能就会相等了。浮点数的比较是通过 浮点数之差的绝对值和一个误差去比较。如:
#define EPSILON 1e-6
if(abs(fValue1 - fValue2) <= EPSILON) // 表示浮点数fValue1 和 浮点数fValue2 相等
if(abs(fValue1 - fValue2) > EPSILON) // 表示浮点数fValue1 和 浮点数fValue2 不相等
指针类型
C++11 之后定义了指针的零值nullptr ,无需沿用历史的null
// nullptr 放前面是为了强制检查判断而非赋值
if(nullptr == ptr)
if(nullptr != ptr)
写在最后
因本人水平有限,错误之处在所难免,欢迎评论区交流指正。