数据类型是程序中最基础的知识,但是很多时候我们往往停留在会用的层面上,并没有深究。在实际应用中,由于 typedef 的存在以及自定义数据结构的自由,使得数据类型的队伍扩大了许多,也出现了一些功能相同或者相似,却有不同的内在的数据变量,布尔类型便是其中之一。
布尔型变量是有两种逻辑状态的变量,它有两个值:真和假,但它并没有在内存里存入“真”、“假”、“true”、“false”这样的字符串,而是我们熟知的整数。说到这里,有同学会说,是 1 和 0 嘛,这很简单。不错,在我们常年的编程经验中,1 和 0 似乎就是 true 和 false 的代名词,但是如果认为所有的“真假”都是用 1、0 表示,那又是太片面了。在我们的程序设计中,经常会用到很多库,若是所有的库使用的布尔类型都是 C/C++ 里面的基础变量类型 bool,那我下面说的纯粹就是废话了。实际情况是,除了基础变量类型 bool 外,微软还定义了 BOOL, 为了支持组件、支持跨语言工作而诞生的变体型变量 VARIANT 里面还定义了 VT_BOOL,这是常用的几种布尔类型变量,他们有什么区别呢?
一、bool
首先说说基础的布尔类型 bool。bool 是标准 C/C++ 类型,它的值是 true 或者 false。true 和 false 并不是某某库做的 define,他们是 C/C++ 的关键字,是内置的布尔变量值。但这只是表面上的,究竟他们在内存里存储的数据什么样的呢?大家可以用 sizeof 和 & 看看 bool 变量占用的字节数以及内存中的地址(千万别说有人不会……)。我们可以看到, bool 变量占用了 1 个字节的内存,当值为 false 的时候,实际上存储的是 0x00, 当值为 true 的时候,存储的是 0x01。这不就是 0 和 1 吗?!是的,但是别急,我们继续往下看。
二、BOOL
C/C++ 程序员由于使用的操作系统不同,便分了阵营,不得不承认现阶段微