zoukankan      html  css  js  c++  java
  • 四、布尔类型和引用

    1、布尔类型

    C++中的布尔类型

    • C++在C语言的基本类型系统之上增加了bool
    • C++中的bool可取的值只有truefalse
    • 理论上bool之占用一个字节

    注意:

    true代表真值,编译器内部用1来表示

    false代表非真值, 编译器内部用0来表示

    C语言中:

    用整型值来代替bool类型,常用0:flase, 1:true

    C++做了类型增强,增加了一个非常严谨的bool类型,truefalse作为关键字存在。

    在C++的布尔类型中,bool类型只有truefalse两个值,C++编译器会将非0值转换为true, 0值转换为false

    bool b = 0;
    printf("b = %d
    ", b);
    b++;
    printf("b = %d
    ", b);
    b = b - 3;
    printf("b = %d
    ", b);
    // bool类型是否支持数学运算?
    
    

    其实在C++语言中,布尔类型的内部实现是用一个字节的整型来实现的,bool类型支持数学运算,编译器会在内部进行调整,非0为true,0 为 false

    代码实验:

    #include <stdio.h>
    
    int main(int argc, char *argv[])
    {
        bool b = false;
        int a = b;
        
        printf("sizeof(b) = %d
    ", sizeof(b));
        // sizeof(b) = 1, bool类型占一个字节
        printf("b = %d, a = %d
    ", b, a);	0
        // b = 0, a = 0
        
        b = 3;	// b = 1
        a = b;  // a = 1
        
        printf("b = %d, a = %d
    ", b, a);
        
        b = -5;	// b = 1
        a = b;  // a = 1
        
        printf("b = %d, a = %d
    ", b, a);
        
        a = 10; // a = 10
        b = a;  // b = 1
        
        printf("a = %d, b = %d
    ", a, b);
        
        a = 0;	// a = 0
        b = a;  // b = 0
        
        printf("a = %d, b = %d
    ", a, b);
        
        return 0;
    }
    

    布尔类型是C++中的基本数据类型

    • 可以定义bool类型的全局变量

    • 可以定义bool类型的常量

    • 可以定义bool类型的指针

    • 可以定义bool类型的数组

      ......

    2、三目运算符

    C++中对三目运算符进行了升级

    考虑下列代码是否正确,分别在C语言和C++环境中编译运行试验

    int a = 1;
    int b =2;
    (a < b ? a : b) = 3;
    printf("a = %d, b = %d
    ", a, b);
    // 在C语言中报错
    // 在C++中,结果a = 3
    

    三目运算符

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

    注意:

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

    三目运算符只有在所有的可能返回都是变量的时候才能作为左值使用,一个常量一个变量就不能作为左值使用

    C++对三目运算符进行了这样的升级,意义何在?

    三目运算符所有的可能返回都是变量的时候,返回的就是变量本身,由此引出了新概念:引用

    3、引用

    3.1 变量名

    变量是一段实际连续存储空间的别名,程序中通过变量来申请并命名存储空间,通过变量的名字可以使用存储空间。

    问题:一段连续的存储空间只能有一个别名吗?

    3.2 引用

    C++中的引用

    • 在C++中增加了引用的概念

      • 引用可以看作一个已定义变量的别名
      • 引用的语法:Type& name = var;
      int a = 4;
      int& b = a;	 // b作为a的别名
      b = 5;		// 操作b就是操作a
      

      注意:

      普通引用在定义时必须用同类型的变量进行初始化。

    • C++对三目运算符做了些啥?

      • 当三目运算符的可能返回都是变量时,返回的是变量引用
      • 当三目运算符的可能返回中有常量时,返回的是
      int a = 1;
      int b = 2;
      (a < b ? a : b) = 3;	// ok,返回a或b的引用,可作为左值
      (a < b ? 1 : b) = 4;	// err,返回1或b的值,不能作为左值
      

    4、小结

    bool类型是C++新增加的基础类型

    bool类型的值只能是truefalse

    C++中的三目运算符可作为左值使用

    C++中的引用可以看作变量的别名来使用

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

  • 相关阅读:
    Eclipse中web项目部署至Tomcat步骤
    解释Eclipse下Tomcat项目部署路径问题(.metadata.pluginsorg.eclipse.wst.server.core mp0wtpwebapps)
    JAVA_HOME环境变量失效的解决办法
    java 程序运行过程 简介
    深入研究Java类加载机制
    SPRING SECURITY JAVA配置:Web Security
    Spring mvc Security安全配置
    FastDateFormat
    Hibernate中Criteria的完整用法
    升级win10,提示(RAM)内存不足2G的解决的方法,亲測可行
  • 原文地址:https://www.cnblogs.com/chenke1731/p/9623724.html
Copyright © 2011-2022 走看看