C++中的布尔类型:
C++在C语言的基本类型系统上增加了bool
C++中的bool可能的值只有true和false
理论上bool只占用一个字节
注意:
true,编译器内部用1来表示
false,编译器内部用0来表示
布尔类型的值
bool类型只有true(非0)和false(0)两个值
C++编译器会将非0值转换为true,0值转换为false
C++编译器内部将bool看做一字节的整形数进行计算,并将最终结果进行转换,非0值转换为1,0值转换为0
下面的代码输出什么?
//bool b = false;
bool b = 0;
printf("b = %dn",b); // = 0
b++; //1
printf("b = %dn",b); // = 1
b = b-3; //-2
printf("b = %dn",b); // = 1
布尔类型是C++中的基本数据类型:
可以定义bool类型的全局变量
可以定义bool类型的常量
可以定义bool类型的指针
可以定义bool类型的指针
可以定义bool类型的数组
C++对三目运算符进行了升级
下面的代码正确吗?
C语言中的三目运算符返回的是变量值
不能作为左值使用
C++中的三目运算符可直接返回变量本身
既可以作为右值使用,又可以作为左值使用
注意:
三目运算符可能返回的值中如果有一个是常量值,则不能作为左值使用
int a = 1;
int b = 2;
(a < b ? a : b) = 3; //a = 3 C++环境
//(a < b ? a : 2) = 3; //a = 3 //编译错误,返回值中有一个是常量值,错误
printf("a = %d, b = %dn",a,b);
C++中的引用
变量名:变量是一段连续存储空间的别名
问题:
一个连续的存储空间只能有一个别名吗?
在C++中新增了引用的概念
引用可以看作一个已定义变量的别名
引用的语法:Type& name = var;
C++中的引用可以看作变量的别名来使用
int a = 4; int* b = a; // b为a的别名 b = 5; //操作b就是操作a float& b = a; //编译器错误,类型不匹配 float& b;//错误,引用没有初始化 float& b = 1; //错误,1是字面常量
注意:
普通引用在定义是必须用同类型的变量进行初始化
C++对三目运算符做了什么?
当三目运算符的可能返回都是变量时,返回的是变量引用
当三目运算符的可能返回中有常量时,返回的是值
int a = 1; int b = 2; (a < b ? a : b) = 3; //**正确,返回a或b的引用,可作为左值** //(a < b ? a : 2) = 3; //a = 3 //**错误,返回1或b的值,不能作为左值**



