• 3 布尔类型和引用


    1 布尔类型

    • C++ 中的布尔类型

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

      • true 代表真值,编译器内部用 1 来表示
      • false 代表非真值,编译器内部用 0 来表示
    • 布尔类型的值

      • bool 类型只有 true (非 0)和 false (0)两个值
      • C++ 编译器会将非 0 值转换为 true0 值转换为 false
    • 布尔类型的使用示例

      • Demo

        #include <stdio.h>
        
        int main(int argc, char *argv[])
        {
            bool b = false;
            int a = b;
            
            printf("sizeof(b) = %d
        ", sizeof(b));  //1
            printf("b = %d, a = %d
        ", b, a);  //0,0
            
            b = 3;  //b = true;
            a = b;  //a = 1
            
            printf("b = %d, a = %d
        ", b, a);  //1,1
            
            b = -5;  //b = true
            a = b;  //a = 1
            
            printf("b = %d, a = %d
        ", b, a);  //1,1
            
            a = 10;
            b = a;  //b = false
            
            printf("a = %d, b = %d
        ", a, b);  //10,1
            
            a = 0;
            b = a;  //b = false
            
            printf("a = %d, b = %d
        ", a, b);  //0,0
            
            return 0;
        }
        
    • 布尔类型是 C++ 中的基本数据类型

      • 可以定义 bool 类型的全局变量
      • 可以定义 bool 类型的常量
      • 可以定义 bool 类型的指针
      • 可以定义 bool 类型的数组
      • 。。。

    2 三目运算符

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

    • 问题:下面的代码正确么?

      int a = 1;
      int b = 2;
      
      (a < b ? a : b) = 3;
      
      printf("a = %d,b = %d
      ",a,b);
      
      • C 语言编译器编译:错误:error: lvalue required as left operand of assignment
      • C++ 编译器编译:正确:a = 3,b = 2
    • C 语言中的三目运算符返回的是变量值不能作为左值使用

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

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

    3 引用

    • 变量名

      • 变量是一段实际连续存储空间的别名
      • 程序中通过变量来申请并命名存储空间
      • 通过变量的名字可以使用存储空间
    • 问题:一段连续的存储空间只能有一个别名么?

      • 可以有多个 => 引用
    • C++ 中的引用

      • 引用可以看作一个已定义变量的别名

      • 引用的语法:Type& name = var;

        int a  = 4;
        int& b = a;  //b为a的别名
        
        b = 5;  //操作b就是操作a
        
      • 注意:普通引用在定义时必须用同类型的变量进行初始化

    • 引用示例

      • Demo

        #include <stdio.h>
        
        int main(int argc, char *argv[])
        {
            int a = 4;
            int& b = a;
            
            b = 5;
            
            printf("a = %d
        ", a);  //5
            printf("b = %d
        ", b);  //5
            printf("&a = %p
        ", &a);  //&a = 0xbfe54aec
            printf("&b = %p
        ", &b);  //&b = 0xbfe54aec
            
            return 0;
        }
        
    • C++ 对三目运算符做了什么?

      • 当三目运算符的可能返回都是变量时,返回的是变量引用
      • 当三目运算符的可能返回中有常量时,返回的是值
      int a = 1;
      int b = 2;
      
      (a < b ? a : b) = 3;  //正确,返回a或b的引用,可作为左值
      (a < b ? 1 : b) = 4;  //错误,返回1或b的值,不能作为左值
      
  • 相关阅读:
    普通人如何做到30分钟读一本书并做完笔记?
    谈谈MySQL死锁之二 死锁检测和处理源码分析
    谈谈MySQL死锁 一
    八种架构设计模式及其优缺点概述(中)
    八种架构设计模式及其优缺点概述(上)
    轻量级开源小程序SDK发车啦
    Magicodes.IE编写多框架版本支持和执行单元测试
    Magicodes.Sms短信库的封装和集成
    Magicodes.IE之导入学生数据教程
    如何基于k8s快速搭建TeamCity(YAML分享)
  • 原文地址:https://www.cnblogs.com/bky-hbq/p/13695178.html
Copyright © 2020-2023  润新知