zoukankan      html  css  js  c++  java
  • 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... ");
    bool a = false;
    int b = 10;

    printf("bool size = %d ",(int)sizeof(a));//打印bool变量的大小
    /*a = 0 b = 10*/
    printf("a = %d ",a);
    printf("b = %d ",b);
    /*a = 1 b=1*/
    a = b;
    b = a;
    printf("a = %d ",a);
    printf("b = %d ",b);

    /*a = 0 b=0*/
    b = 0;
    a = b;
    printf("a = %d ",a);
    printf("b = %d ",b);

    /*a = 1 b =10*/
    b+=10;
    a = b;
    printf("a = %d ",a);
    printf("b = %d ",b);

    /*a = 1 b=1*/
    a +=10;
    b = a;
    printf("a = %d ",a);
    printf("b = %d ",b);


    printf("End... ");

    return 0;
    }

      运行结果:

      

      布尔变量是C++的基本数据类型,支持运算,这样做是为了兼容C语言。但是编译器会吧计算的结果还原成一个bool值。

      可以定义为 常量、全局变量、常量、指针、数组...

    C++对三目运算符的改进:

      测试代码:

      

    #include <stdio.h>
    
    int main(int argc, char *argv[])
    {
        printf("Begin...
    ");
        
        int a = 5;
        int b = 2;
        (a < b ? a:b) = 10; //运行结果  b=10  a=5 
        //(a < b ? a:1) = 10; //将会报错
        printf("a = %d	",a);                 
        printf("b = %d
    ",b);
    
        printf("End...
    ");
        
        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...
    ");
        
        int a = 10;
        int &b = a;
        //int &b = 1;  //报类型错误
        //float &b = a;//报类型错误
        
        printf("a = %d	",a);    //运行结果  a = b = 10 a的地址 = b的地址
        printf("b = %d
    ",b);
    
        printf("a = 0x%p	",&a);                 
        printf("b = 0x%p
    ",&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可以看做变量的别名来使用

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

  • 相关阅读:
    每天干的啥?(2017.7)
    每天干的啥?(2017.6)
    每天干的啥?(2017.5)
    每天干的啥?(2017.4)
    C# WinForm中如何让当前应用程序只允许启动一个实例
    C# WinForm 关闭登陆窗体后进程还再内存怎么办?
    ASP.NET在MVC控制器中获取Form表单值的方法
    C#封装CRUD到SqlHelper类解读
    windows 10微软账户不能访问局域网共享,但是本地账户可以访问
    C#高级参数params的使用
  • 原文地址:https://www.cnblogs.com/hjxzjp/p/11560197.html
Copyright © 2011-2022 走看看