C++ bool、三目运算符、引用

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可以看做变量的别名来使用

  三目运算符的可能都是变量时,返回的是引用