C++

C++学习笔记-布尔类型

Posted by zihengCat on 2017-06-27

前言

本文讲解C++中的布尔类型bool

布尔类型Boolean

现代的程序设计语言中,一定少不了bool布尔类型之一基本数据类型。
可是啊,C语言是没有bool类型的,后来C提供了一个标准库来补充bool类型,但是不管怎么说,C原生是没有bool类型的。
想要在C中使用bool,我们一般会用整型来替代,C判断逻辑真假的规则也很宽泛:**0为假,非0为真**。

Boolean type
bool - type, capable of holding one of the two values: true or false. The value of sizeof(bool) is implementation defined and might differ from 1.

在C++中,终于加上了对布尔类型的支持。bool, true, false成为了C++中的关键字。

int main(void){
    bool b_t = true;
    bool b_f = false;
    return 0;
}

C++继承了C逻辑判断的规则。

实现机制

C++与C的逻辑判断有细微的不同。

#include <stdio.h>
#define EXPE_T    (1 <= 2)
#define EXPE_F    (1 == 2)
int main(void){
    printf("%d %lu\n", EXPE_T, sizeof(EXPE_T));
    printf("%d %lu\n", EXPE_F, sizeof(EXPE_F));
    return 0;
}

C和C++执行上述代码,结果有细微区别:

  • true为1, false为0,这点C/C++相同
  • sizeof的值不同,C为4,C++为1

我们来观察C++代码生成的汇编代码:

int main(void){
    bool b_t = true;
    bool b_f = false;
    return 0;
}
...
main:
    ...
    movb    $1, -1(%rbp)
    movb    $0, -2(%rbp)
    ...
...

原来,在C++中,bool类型是占1个字节的整型,true的字面量为1,false的字面量为0。而在C中,逻辑类型占4字节,正好是int整型所占的大小。

参考资料