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++编译器进行编译并执行,结果如下: