1.C++中的布尔类型
-> C++在C语言的基本类型系统之上增加了bool
-> C++中的bool可取的值只有true和false
-> 理论上bool只占用一个字节
注意:true代表真值,编译器内部用1表示
false代表非值,编译器内部用0表示。
-> bool类型只有true非0,false0两个值
-> C++编译器会将非0值转换为true,0值转换为false。
示例:
#include <stdio.h>
int main(int argc, char *argv[])
{
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;
}
布尔类型是C++中的基本数据类型
-> 可以定义bool的全局变量。
-> 可以定义bool的常量。
-> 可以定义bool的指针。
-> 可以定义bool的数组。
只要其他数据类型可以定义的bool类型就能定义 。
2.三目运算符
C语言中三目运算符返回的是变量值。
-> 不能作为左值使用。
C++中的三目运算符可直接返回变量本身
-> 既可以作为右值使用,也可以作为左值使用。
注意:三目运算符可能返回的值中如果有一个是常量值,则不能作为左值使用。
3. C++中的引用
在C++中新增了引用的概念。
-> 引用可以看做已定义变量的别名。
示例:
int main(int argc, char *argv[])
{
int a = 4;
int& b = a; //b为a的别名引用
b = 5; //操作b就是操作a
printf("a = %d\n", a); //5
printf("b = %d\n", b); //5
printf("&a = %p\n", &a); //0xbfe54aec
printf("&b = %p\n", &b); //0xbfe54aec a,b打印出来的
//地址是一样的,两个代表同一个地址。
return 0;
}
int main()
{
int a = 1;
int b = 2;
(a < b ? a : b) = 3;
printf("a = %d, b = %d\n",a,b);
}
C++对三目运算符做了什么?
-> 当三目运算符的可能返回都是变量时,返回的是变量引用。
-> 当三目运算符的可能返回中有常量时,返回的是值。
int a = 1;
int b = 2;
(a < b ? a : b) = 3; //正确,返回a或b的引用,可作为左值。
(a < b ? 1 : b) = 3; //错误,返回1或b的值,不能作为左值。
小结:
-> bool类型是C++新增加的基础类型
-> bool类型的值只能是true和false
-> C++中的三目运算符可作为左值使用
-> C++中的引用可以看做变量的别名来使用
-> 三目运算符的可能返回都是变量时,返回的是引用。