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的值,不能作为左值
    
原文地址:https://www.cnblogs.com/bky-hbq/p/13695178.html