布尔类型及引用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了布尔类型及引用相关的知识,希望对你有一定的参考价值。
今天我们来学习下 C++ 中的布尔类型。说起布尔类型,有的同学可能在 C 语言中听过,0 代表假,1 代表真。我们在 C 语言中用 int 类型的数来表示布尔类型,这也是可取的。但是在 C++ 中正式引出了布尔类型这个概念,它是一种基本类型。C++ 中的 bool 可取的值只有 true 和 false,理论上 bool 只占用一个字节。注意:true 代表真值,编译器内部用 1 来表示;false 代表非真值编译器内部用 0 来表示。
bool 类型只有 true(非0)和 false(0)两个值,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; }
我们分析下,第 8 行打印 bool 类型 b 的内存大小,那么便是为 1 了。由于它初始化为 false ,所以为 0, a = b 当然也为 0 了;第 11 行 b 为非 0。所以第 14 行打印出 1, 1;第 16 行 b 为非 0。所以第 19 行打印出 1, 1;第 21 行 a 为 10,所以第 24 行打印出 10, 1;第 26 行 a 为 0,所以第 29 行打印出 0, 0啦。我们看看编译结果
因为布尔类型是 C++ 中的基本数据类型,所以我们可以定义 bool 类型的:局部变量、全局变量、常量、指针、数组 ... ; C++ 对三目运算符也进行了升级,在 C 语言中的三目运算符返回的是变量值,不能作为左值使用;但在 C++ 中,三目运算符可直接返回变量本身,所以它即可作为右值使用,又可作为左值使用。注意:三目运算符可能返回的值中如果有一个是常量值,则不能作为左值使用。
下来我们以代码为例进行分析
#include <stdio.h> int main(int argc, char *argv[]) { int a = 1; int b = 2; (a < b ? a : b) = 3; printf("a = %d, b = %d\n", a, b); return 0; }
这段代码在 gcc 中肯定编译通不过因为三目运算符返回的是变量值,给常量赋值肯定出问题,那么在 g++ 中,它可以通过,返回的是变量本身,所以第 8 行相当于 a = 3。我们来看看编译结果
我们看到 gcc 编译直接报错,但是 g++ 编译通过,并且成功的改变了 a 的值。在这块我们就不得不提变量名了,我们之前学过变量是一段实际连续存储空间的别名;程序中通过变量来申请并命名存储空间;通过变量的名字可以使用存储空间。我们再来想一个问题:一段连续的存储空间只能有一个别名吗?在 C++ 中新增了引用的概念。那么什么是引用呢?引用可以看作一个已定义变量的别名,它的语法格式是:TYpe& name = var;注意:普通引用在定义时必须同同类型的变量进行初始化。我们以代码为例进行分析
#include <stdio.h> int main(int argc, char *argv[]) { int a = 3; 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; }
我们看到在第 6 行进行了 a 的引用,也就是说, b 为 a 的别名,改变 b 的值就相当于改变 a 的值啦。我们看看编译结果
我们看到 a 和 b 都改为了 5,并且他俩的地址是一样的,也就证明了 b 是 a 的别名。那么回到之前的三目运算符的问题,当三目运算符的可能返回值都是变量时,返回的是变量引用;当三目运算符的可能返回值中有常量时,返回的是值。如下所示
通过对布尔类型和引用的学习,总结如下:1、bool 类型是 C++ 新增加的基础类型,它的值只能是 true 和 false;2、C++ 中的三目运算符可作为左值使用;3、C++ 中的引用可以看作变量的别名来使用;4、三目运算符的可能返回都是变量时,返回的是引用。
欢迎大家一起来学习 C++ 语言,可以加我QQ:243343083。
以上是关于布尔类型及引用的主要内容,如果未能解决你的问题,请参考以下文章