布尔类型的概念
C++中的布尔类型
C++在C语言的基本类型系统上增加了bool
布尔类型是C++中的基本数据类型
可以定义布尔类型的全局变量
可以定义布尔类型的常量
可以定义布尔类型的指针
可以定义布尔类型的数组
…
C++中的bool可取的值只有 true 和 false
true代表真值, 编译器内部用 1 来表示
false代表非真值, 编译器内部用 0 来表示
C++编译器会将非0值转换为true,0值转换为false
理论上bool只占用一个字节
/*
测试代码
*/
#include <stdio.h>
int main()
{
bool b = false;
int a = b;
printf("sizeof(b) = %d\n", sizeof(b)); // 1
printf("b = %d, a = %d\n", b, a); // 0, 0
b = 3;
a = b;
printf("b = %d, a = %d\n", b, a); // 1, 1
b = -5;
a = b;
printf("b = %d, a = %d\n", b, a); // 1, 1
a = 10;
b = a;
printf("a = %d, b = %d\n", a, b); // 10, 1
a = 0;
b = a;
printf("a = %d, b = %d\n", a, b); // 0,0
return 0;
}
运行结果
sizeof(b) = 1
b = 0, a = 0
b = 1, a = 1
b = 1, a = 1
a = 10, b = 1
a = 0, b = 0
三目运算符
C语言中, 三目运算符返回的是变量值, 不能作为左值使用
C++中的三目运算符可直接返回变量本身, 即可作为右值使用,又可作为左值使用
当三目运算符的可能返回都是变量时, 返回的是变量引用, 可作为左值
当三目运算符的可能返回中有常量时,返回的是值, 不能作为左值
int a = 1;
int b = 2;
(a < b ? a : b) = 3; // ok, 返回 a 或 b 的引用,可作为左值
(a < b ? 1 : b) = 3; // error, 返回 1 或 b 的值, 不能作为左值