关键词:bool类型、三目运算符、引用
1. C++中的布尔类型
C++在C语言的基本类型系统之上增加了bool
类型,bool
可取true
和false
,理论上bool
只占用一个字节。
注意:true
代表真值,编译器内部用1来表示;false
代表非真值,编译器内部用0表示。
-
bool
类型是C++中的基本数据类型,可以定义bool
类型的全局变量,可以定义bool
类型的常量,可以定义bool
类型的指针,可以定义bool
类型的数组,等等。
2. 三目运算符
在C语言中,三目运算符不能在赋值符号的左侧,如下:
#include<stdio.h>
int main()
{
int a = 1;
int b = 2;
(a < b ? a : b) = 3;
printf("a = %d, b = %d\n", a, b);
return 0;
}
输出结果:
1.c: In function ‘main’:
1.c:8:21: error: lvalue required as left operand of assignment
(a < b ? a : b) = 3;
在C++中,三目运算符能在赋值符号的左侧,如下:
#include<stdio.h>
int main()
{
int a = 1;
int b = 2;
(a < b ? a : b) = 3;
printf("a = %d, b = %d\n", a, b);
return 0;
}
输出结果:
a = 3, b = 2
总结: C语言中的三目运算符返回的值是变量值——不能作为左值使用;
C++中的三目运算符可直接返回变量本身——即可作为右值使用,又可作为左值使用
注意:三目运算符可能返回的值中如果一个是常量值,则不能作为左值使用。
思考1:C++对三目运算符做了怎样的升级?对这种升级的意义是什么?
升级:当三目运算符所有返回都是变量时,返回的未变量本身。
3. C++中的引用
- 变量名的回顾
- 变量是一段实际连续存储空间的别名
- 程序中通过变量来申请并命名存储空间
- 通过变量的名字可以使用存储空间
问题: 一段连续的存储空间只能有一个别名吗?
- 在C++中新增引用的概念
- 引用可以看作一个已定义变量的别名
- 引用的语法及实例:
//语法:
Type& name = var;
//实例:
int a = 4;
int& b = a; // b为a的别名
b = 5; // 操作b就是操作a
注意:普通引用在定义时必须用同类型的变量进行初始化。
引用的初体验
#include <stdio.h>
#define LOG_INT(i) printf("%s = %d\n", #i, i);
#define LOG_POINTER(p) printf("%s =%p\n", #p, p);
int main(int argc, char* argv[])
{
int a = 4;
int& b = a;
b = 5;
LOG_INT(a);
LOG_INT(b);
LOG_POINTER(&a);
LOG_POINTER(&b);
return 0;
}
输出结果:
a = 5
b = 5
&a =0xbfafffb8
&b =0xbfafffb8
总结: 在C++中,对同一段连续的存储空间(变量),可以起任意多个别名。
思考题1答案:C++对三目运算符做了什么?
- 当三目运算符的可能返回都是变量时,返回的是变量的引用;
- 当三目运算符的可能返回中有常量时,返回的是值。
int a = 1;
int b = 2;
(a < b ? a : b) = 3; // 正确,返回a或b的引用,可作为左值
(a < b ? 1 : b) = 4; // 错误,返回1或b的值,不能作为左值
4. 小结
-
bool
类型是C++新增的基础类型 -
bool
类型的值只能是true
和false
- C++中的三目运算符可作为左值使用
- C++中的引用可以作为变量的别名来使用
- 三目运算符的可能返回都是变量时,返回的是引用
声明:此文章仅是本人在学习狄泰学院《C++深度解析教程》所做的笔记,文章中包含狄泰软件资料内容,一切版权归狄泰软件所有!
实验环境:gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3)