1 布尔类型
-
C++ 中的布尔类型
- C++ 在 C 语言的基本类型系统之上增加了
bool
- C++ 中的
bool
可取的值只有true
和false
bool
只占用一个字节
- C++ 在 C 语言的基本类型系统之上增加了
-
注意:
true
代表真值,编译器内部用 1 来表示false
代表非真值,编译器内部用 0 来表示
-
布尔类型的值
bool
类型只有true
(非 0)和false
(0)两个值- C++ 编译器会将非 0 值转换为
true
,0 值转换为false
-
布尔类型的使用示例
-
Demo
#include <stdio.h> int main(int argc, char *argv[]) { bool b = false; int a = b; printf("sizeof(b) = %d ", sizeof(b)); //1 printf("b = %d, a = %d ", b, a); //0,0 b = 3; //b = true; a = b; //a = 1 printf("b = %d, a = %d ", b, a); //1,1 b = -5; //b = true a = b; //a = 1 printf("b = %d, a = %d ", b, a); //1,1 a = 10; b = a; //b = false printf("a = %d, b = %d ", a, b); //10,1 a = 0; b = a; //b = false printf("a = %d, b = %d ", a, b); //0,0 return 0; }
-
-
布尔类型是 C++ 中的基本数据类型
- 可以定义
bool
类型的全局变量 - 可以定义
bool
类型的常量 - 可以定义
bool
类型的指针 - 可以定义
bool
类型的数组 - 。。。
- 可以定义
2 三目运算符
-
C++ 对三目运算符进行了升级
-
问题:下面的代码正确么?
int a = 1; int b = 2; (a < b ? a : b) = 3; printf("a = %d,b = %d ",a,b);
- C 语言编译器编译:错误:error: lvalue required as left operand of assignment
- C++ 编译器编译:正确:a = 3,b = 2
-
C 语言中的三目运算符返回的是变量值,不能作为左值使用
-
C++ 中的三目运算符可以直接返回变量本身,既可以作为右值使用,又可以作为左值使用
-
注意:如果三目运算符可能返回的值如果有一个是常量值,则不能作为左值使用
3 引用
-
变量名
- 变量是一段实际连续存储空间的别名
- 程序中通过变量来申请并命名存储空间
- 通过变量的名字可以使用存储空间
-
问题:一段连续的存储空间只能有一个别名么?
- 可以有多个 => 引用
-
C++ 中的引用
-
引用可以看作一个已定义变量的别名
-
引用的语法:
Type& name = var;
int a = 4; int& b = a; //b为a的别名 b = 5; //操作b就是操作a
-
注意:普通引用在定义时必须用同类型的变量进行初始化
-
-
引用示例
-
Demo
#include <stdio.h> int main(int argc, char *argv[]) { int a = 4; int& b = a; b = 5; printf("a = %d ", a); //5 printf("b = %d ", b); //5 printf("&a = %p ", &a); //&a = 0xbfe54aec printf("&b = %p ", &b); //&b = 0xbfe54aec return 0; }
-
-
C++ 对三目运算符做了什么?
- 当三目运算符的可能返回都是变量时,返回的是变量引用
- 当三目运算符的可能返回中有常量时,返回的是值
int a = 1; int b = 2; (a < b ? a : b) = 3; //正确,返回a或b的引用,可作为左值 (a < b ? 1 : b) = 4; //错误,返回1或b的值,不能作为左值