3、布尔类型和引用

1、C++中的布尔类型

— C++在C语言的基本类型系统之上增加了 bool
— C++中的 bool 可取的值只有 true 和 false
— 理论上 bool 只占一个字节
注意:
true 代表真值,编译器内部用 1 来表示
false 代表非真值,编译器内部用 0 来表示

2、布尔类型的值

  • bool 类型只有true(非0)和 false(0)两个值
  • C++编译器会将非0值转换成 true,0值转换成 false
    下面的代码输出什么?
	bool b = 0;
	printf("b = %d\n", b);
	b++;
	printf("b = %d\n", b);
	b = b - 3;
	printf("b = %d\n", b);

虽然说从概念上C++确实提供了 bool 类型具体的对应的基础类型,但是它的内部实现还是用一个字节的整型,所以为了兼容C语言,bool 类型是支持数学运算的,只不过C++编译器在内部会进行一些调整,当 bool 类型进行数学运算,它得到的值是一个非0值,C++编译器直接将这个非0值直接转换成 true,0值转换成 false
在这里插入图片描述

#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;
}

在这里插入图片描述

从这个程序我们可以看出,对布尔类型赋值一个非0的数,它会在内部立刻转换成true,也就是数字1。

  • 布尔类型是C++中的基本数据类型
    — 可以定义bool类型的全局变量
    — 可以定义bool类型的常量
    — 可以定义bool类型的指针
    — 可以定义bool类型的数组
    — …

3、三目运算符

  • C++对三目运算符进行了升级
    下面的代码正确吗?
	int a = 1;
	int b = 2;
	(a < b ? a : b )= 3;
	printf("a = %d,b = %d\n", a, b);

在这里插入图片描述
如果在这里修改一下代码,变成

	int a = 1;
	int b = 2;
	(a < b ? a : 2 )= 3;
	printf("a = %d,b = %d\n", a, b);

在这里插入图片描述
为什么会有这样的差别呢?

  • C语言的三目运算符返回的是变量值
    — 不能作为左值使用
  • C++中的三目运算符可直接返回变量本身
    — 既可以作为左值使用,又可以作为右值使用

注意:
三目运算符可能返回的值中如果有一个是常量值,则不能作为左值使用

4、C++中的引用

  • 在C++中新增加了引用的概念
    — 引用可以看做一个已定义变量的别名
    — 引用的用法:Type& name = var;
	int a = 4;
	int& b = a;		//b为a的别名,b和a有相同的类型,都为int
	
	b = 5;			//操作b就是操作a

引用在定义的时候必须要进行初始化

#include <stdio.h>

int main()
{
	int a = 4;
	int& b = a;
	b = 5;

	printf("a = %d\n", a);
	printf("b = %d\n", b);
	printf("&a = %p\n", &a);
	printf("&b = %p\n", &b);

	return 0;
}

在这里插入图片描述
错误用法:

	int a = 4;
	float& b = a;		//类型错误

	float&b;			//没有初始化

	int& a = 1;			//不能是常量的别名
  • C++对三目运算符做了什么?
    — 当三目运算符的可能返回都是变量时,返回的是变量引用
    — 当三目运算符的可能返回有常量时,返回的是值
	int a = 1;
	int b = 2;
	
	(a < b ? a : b )= 3;	//正确,返回的是a或b的引用,可作为左值
	(a < b ? 1 : b )= 4;	//错误,返回1或b的值,不能作为左值

小结:

  • bool类型是C++新增加的基础类型
  • bool类型的值只能是true或false
  • C++中的三目运算符可作为左值来使用
  • C++中的引用可以看做变量的别名来使用
  • 三目运算符的 可能返回 都是变量时,返回的是引用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值