对于各个类型与0比较的总结

根据《高质量C++/C编程指南》中的相关知识点得出。

一、布尔变量与零值比较

【规则 4-3-1】 不可将布尔变量直接与 TRUE、 FALSE 或者 1、 0 进行比较。

根据布尔类型的语义,零值为“假”(记为 FALSE),任何非零值都是“真”(记为TRUE)。 TRUE 的值究竟是什么并没有统一的标准。例如 Visual C++ 将 TRUE 定义为 1,而 Visual Basic 则将 TRUE 定义为-1。假设布尔变量名字为flag,它与零值比较的标准 if 语句如下:

if (flag) // 表示 flag 为真

if (!flag) // 表示 flag 为假

其它的用法都属于不良风格,例如:

if (flag == TRUE)

if (flag == 1 )

if (flag == FALSE)

if (flag == 0)

自我总结:即布尔值本身就代表的真和家,不需要再进行判断比较。

二、整型变量与零值比较

【规则 4-3-2】 应当将整型变量用“ ==”或“! =”直接与 0 比较。

假设整型变量的名字为 value,它与零值比较的标准 if 语句如下:

if (value == 0)

if (value != 0)

不可模仿布尔变量的风格而写成

if (value) // 会让人误解 value 是布尔变量

if (!value)

自我总结:整型变量是变量并不代表一定的值,如果直接表示1或非零会出现错误,无法达到效果。

三、浮点变量与零值比较

【规则 4-3-3】 不可将浮点变量用“ ==”或“! =”与任何数字比较。

千万要留意,无论是 float 还是 double 类型的变量,都有精度限制。所以一定要避免将浮点变量用“ ==”或

“!=”与数字比较,应该设法转化成“ >=”或“ <=”形式。

假设浮点变量的名字为 x,应当将

if (x == 0.0) // 隐含错误的比较

转化为

if ((x>=-EPSINON) && (x<=EPSINON))

其中 EPSINON 是允许的误差(即精度)。

自我总结:浮点变量与零值比较即将其与零左右在误差范围内的数据域进行比较,否则会出现精度偏差。

四、指针变量与零值比较

【规则 4-3-4】 应当将指针变量用“ ==”或“! =”与 NULL 比较。

指针变量的零值是“空”(记为 NULL)。尽管 NULL 的值与 0 相同,但是两者意义不同。假设指针变量的名字为 p,它与零值比较的标准 if 语句如下:

if (p == NULL) // p 与 NULL 显式比较,强调 p 是指针变量

if (p != NULL)

不要写成

if (p == 0) // 容易让人误解 p 是整型变量

if (p != 0)

或者

if (p) // 容易让人误解 p 是布尔变量

if (!p)

自我总结:指针变量的零值即为空,反之为非空。

经过上述四种类型与零值的比较,说明了编写规范的重要性,如果按照自己的想法来进行编写,会造成阅读者的阅读困难,还会造成编码错误。为了良好的代码环境,应严格遵从代码要求。

时间: 2024-10-18 08:54:29

对于各个类型与0比较的总结的相关文章

布尔类型-2.0

// //  ViewController.m //  OC-Design // //  Created by 葛迅 on 14/9/25. // // #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad {     [super viewDidLoad];          BOOL areTheyDiff;   

dynamic类型----4.0新特性

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Dynamic; namespace ConsoleApplication4 {     class Program     {         static void Main(string[] args)         {       

Swift2.0语言教程之函数的返回值与函数类型

Swift2.0语言教程之函数的返回值与函数类型 Swift2.0中函数的返回值 根据是否具有返回值,函数可以分为无返回值函数和有返回值函数.以下将会对这两种函数类型进行讲解. Swift2.0中具有一个返回值的函数 开发者希望在函数中返回某一数据类型的值,必须要在函数声明定义时为函数设定一个返回的数据类型,并使用return语句进行返回.其中,return语句的一般表示形式如下: return 表达式 其中,表达式可以是符合Swift标准的任意表达式.而具有返回值的函数声明定义形式如下: fu

Ntrip通讯协议1.0

1 什么是Ntrip? CORS(Continuously Operating Reference Stations)就是网络基准站,通过网络收发GPS差分数据.用户访问CORS后,不用单独架设GPS基准站,即可实现GPS流动站的差分定位. 访问CORS系统,就需要网络通讯协议.NTRIP( Networked Transport of RTCM via Internet Protocol)是CORS系统的通讯协议之一. 2 系统组成 使用NTRIP通讯协议的CORS系统,其组成请参考下图 图1

可空类型

可空类型.匿名方法和迭代器这三个优美的特性是在C#2.0里面提出来的. 1.可空类型 当我们在使用数据库的时候,会发现这样的一个矛盾点:数据库的字段设置是允许为null的,比如日期的字段,当你想把数据库表映射为C#中的对象时会发现,DateTime类型在C#语言中是不能为null的! 1.1 简介 可空类型也是值类型,但它是包含null值的值类型:int? nullable=null; int?就是可空的int类型.很明显,这又是一个语法糖,肯定不会存在int?这样的类型.对于编译器而言,int

(*(void(*) ())0)()------这是什么?

第一步:void(*) (),可以明白这是一个函数指针类型.这个函数没有参数,没有返回值. 第二步:(void(*) ())0,这是将0 强制转换为函数指针类型,0 是一个地址,也就是说一 个函数存在首地址为0 的一段区域内. 第三步:(*(void(*) ())0),这是取0 地址开始的一段内存里面的内容,其内容就是保存 在首地址为0 的一段区域内的函数. 第四步:(*(void(*) ())0)(),这是函数调用.

JavaScript基础 == 等于 比较运算符 只比较两个变量的值,不管类型

镇场诗: 清心感悟智慧语,不着世间名与利.学水处下纳百川,舍尽贡高我慢意. 学有小成返哺根,愿铸一良心博客.诚心于此写经验,愿见文者得启发.------------------------------------------ code: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=ut

C#隐式类型

隐式类型 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 隐式类型var { class Program { static void Main(string[] args) { //优点:不需要在左侧也加上Dictionary<string,string>代码得到简化 var dict = n

h.264宏块与子宏块类型

宏块类型mb_type 宏块类型表示的是宏块不同的分割和编码方式,在h.264的语法结构中,宏块类型在宏块层(macroblock_layer)中用mb_type表示(请参考h.264语法结构分析中的macroblock_layer).而mb_type是与当前宏块所在的slice相关的,相同数值的mb_type在不同类型的slice中表示的类型会不一样. I slice的宏块类型 I slice中的宏块类型只能是I宏块类型(I开头),下标列出了所有的I宏块类型 mb_type name tran