第4课 布尔类型和引用

C++中的布尔类型:

  C++在C语言的基本类型系统之上增加了bool

  C++中的bool可取的值只有true和false(在程序编写上使用true或false,在编译器内部还是用1或0)

  理论上bool只占用一个字节

注意:

  true代表真值,编译器内部用1来表示

  false代表非真值,编译器内部用0来表示

C语言中没有对应的布尔的基本的类型,一般用int代替,这在功能上是可以的,但是显得不那么严谨。

C++在类型上进行了加强,所以引入了bool类型。

下面的代码会输出什么?

将0赋值给bool类型的变量b是合法的,C++要让这种语法能编译过去,因为要兼容C语言。

  为了兼容C语言,C++中的bool类型是支持数学运算的,只不过C++编译器在内部会做一些调整,运算之后如果是非零值,C++编译器会将这个值直接转换为true。0值直接转换为false。

对上述的程序进行编译并运行,结果如下:

b=b-3导致b的值为-2,但由于b是bool类型,C++编译器会对其内部的值进行调整,只要不是0最终都会变成1。

 再次看示例程序:

 1 #include <stdio.h>
 2 
 3 int main(int argc, char *argv[])
 4 {
 5     bool b = false;
 6     int a = b;
 7     
 8     printf("sizeof(b) = %d\n", sizeof(b));
 9     printf("b = %d, a = %d\n", b, a);
10     
11     b = 3;
12     a = b;
13     
14     printf("b = %d, a = %d\n", b, a);
15     
16     b = -5;
17     a = b;
18     
19     printf("b = %d, a = %d\n", b, a);
20     
21     a = 10;
22     b = a;
23     
24     printf("a = %d, b = %d\n", a, b);
25     
26     a = 0;
27     b = a;
28     
29     printf("a = %d, b = %d\n", a, b);
30     
31     return 0;
32 }

执行结果如下:

从输出结果可以得到,bool类型占用了1个字节。

布尔类型是C++中的基本数据类型:

C++对三目运算符进行了升级,考虑下面的代码正确吗?

三目运算符放到了赋值符号的左边,在C语言中三目运算符不能当做左值来使用。

用C语言编译器对上述程序进行编译,结果如下:

可见,在C语言中三目运算符当做左值时会报错。

用C++编译器进行编译并执行,结果如下:

猜你喜欢

转载自www.cnblogs.com/wanmeishenghuo/p/9508811.html