C++ bool、三目运算符、引用
bool变量:
C++相对于C语言加入了bool变量,其值为true(1) 和 false(0)。true表示不为零的数 false表示为零的数,占用一个字节的空间。
代码:
/* 编译环境
gcc version 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04)
*/
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("Begin...\n");
bool a = false;
int b = 10;
printf("bool size = %d\n",(int)sizeof(a));//打印bool变量的大小
/*a = 0 b = 10*/
printf("a = %d\t",a);
printf("b = %d\n",b);
/*a = 1 b=1*/
a = b;
b = a;
printf("a = %d\t",a);
printf("b = %d\n",b);
/*a = 0 b=0*/
b = 0;
a = b;
printf("a = %d\t",a);
printf("b = %d\n",b);
/*a = 1 b =10*/
b+=10;
a = b;
printf("a = %d\t",a);
printf("b = %d\n",b);
/*a = 1 b=1*/
a +=10;
b = a;
printf("a = %d\t",a);
printf("b = %d\n",b);
printf("End...\n");
return 0;
}
运行结果:
布尔变量是C++的基本数据类型,支持运算,这样做是为了兼容C语言。但是编译器会吧计算的结果还原成一个bool值。
可以定义为 常量、全局变量、常量、指针、数组...
C++对三目运算符的改进:
测试代码:
#include <stdio.h> int main(int argc, char *argv[]) { printf("Begin...\n"); int a = 5; int b = 2; (a < b ? a:b) = 10; //运行结果 b=10 a=5 //(a < b ? a:1) = 10; //将会报错 printf("a = %d\t",a); printf("b = %d\n",b); printf("End...\n"); return 0; }
在 C语言编译器中运行结果
提示,左值错误
使用C++编译器
未报错 正常运行。
当 可能返回值中出现常量时,所报的错误与 C 中错误一致。
C 语言中 不允许 三目运算符为左值 。例如 (a<b ? a:b) = 10; 这样的写法 在C语言中是错误的。
C++中对三目运算符做出了增强,允许在三目运算符为左值,但是可能返回值种不能出现常量。因为常量不能等于另外一个常量。C++之所以能够这样操作是因为C++增加了一个“引用”的概念
C++对三目运算符做了什么了?
——当三目运算符的可能返回是变量的时候,返回的是一个引用。
——当三目运算符的可能返回是常量的时候,返回的是一个常量
C++的 引用:
测试代码:
#include <stdio.h> int main(int argc, char *argv[]) { printf("Begin...\n"); int a = 10; int &b = a; //int &b = 1; //报类型错误 //float &b = a;//报类型错误 printf("a = %d\t",a); //运行结果 a = b = 10 a的地址 = b的地址 printf("b = %d\n",b); printf("a = 0x%p\t",&a); printf("b = 0x%p\n",&b); return 0; }
测试1:
a = 10; b = 10; 而且a 与 b的地址相同。
测试2:
证明:引用的类型不能是常量。
测试3:
由于C++语言是一个强类型的语言,对类型检查相当严格,所以使用一个float型的变量去 引用一个int 型的变量 是不允许的。
“引用”可以看成一个已经定义变量的 别名。引用语法 Type & name = var;
例如:int a = 5;
int &b =a;
b = 10;
上面的代码运行后,a = 10; b = 10; 而且a 与 b的地址相同。所以通过上述特性 在C++中一个变量是可以有多个 不同的名字的。(也就是说一个内存空间是可以有多个名字的,这个多个名字指向同一个内存空间)。
由于 C++是一个强类型语言,在对类型检查的过程中,如果类型不同将会报错。所以普通引用在定义时必须用同类型的变量进行初始化。
小结:
bool类型是C++增加的一个新的基础类型
bool类型的值只能是 false 或者 true
C++的三目运算符可以作为左值
C++的yiny可以看做变量的别名来使用
三目运算符的可能都是变量时,返回的是引用