zoukankan      html  css  js  c++  java
  • C++中的布尔类型和引用

    1,C++ 中的布尔类型:

        1,C++ 在 C 语言的基础类型系统之上增加了 bool;

           1,C 语言中,没有 bool 类型存在,往往都是用整型代替 bool 类型,常用 0 表示假,用 1 表示真;

           2,bool 本来就有这样的类型,但是在 C 语言中却没有这样的对应基本类型,所以只有使用整型代替 bool 类型,但是不严谨;

           3,这也是 C++ 中的 “+” 的体现;

        2,C++ 中的 bool 可能的值只有 true 和 false;

           1,true 代表真值,编译器内部用 1 来表示(但是会将非 0 值也转换为 true 而变为 1 存储);

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

        3,理论上 bool 只占用一个字节;

       

    2,bool 类型只有 true(非 0)和 false(0)两个值;

       C++ 编译器会将非 0 值转换为 true,0 值转换为 false;

     1 bool b = 0;  // 兼容 C,合法;
     2        
     3 printf("b = %d
    ", b);  // b = 0;
     4 
     5 b++;  // 为了支持 C 语言,bool 类型支持数学运算;
     6 
     7 printf("b = %d
    ", b);  // b = 1;
     8 
     9 b = b - 3;  
    10 
    11 printf("b = %d
    ", b);  // b = 1;

     

    3,布尔类型的使用变成实验:

        1,main.cpp 文件:

     1 #include <stdio.h>
     2 
     3 int main(int argc, char *argv[])
     4 {
     5     bool b = false;  
     6     int a = b;
     7     
     8     printf("sizeof(b) = %d
    ", sizeof(b));  // 1;
     9     printf("b = %d, a = %d
    ", b, a);  // 0,0;
    10     
    11     b = 3;
    12     a = b;
    13     
    14     printf("b = %d, a = %d
    ", b, a);  // 1,1;
    15     
    16     b = -5;
    17     a = b;
    18     
    19     printf("b = %d, a = %d
    ", b, a);  // 1,1;
    20     
    21     a = 10;
    22     b = a;
    23     
    24     printf("a = %d, b = %d
    ", a, b);  // 10,1;
    25     
    26     a = 0;
    27     b = a;
    28     
    29     printf("a = %d, b = %d
    ", a, b);  // 0,0;
    30     
    31     return 0;
    32 }

       

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

        1,可以定义 bool 类型的全局变量;

        2,可以定义 bool 类型的常量;

        3,可以定义 bool 类型的指针;

        4,可以定义 bool 类型的数组;

        5,...;

       

    5,C++ 中的三目运算符(运算符当中被明显升级的):

        1,C++ 对三目运算符进行了升级:

    1 int a = 1;
    2 int b = 2;
    3 
    4 (a < b ? a : b) = 3;  // C 中三目运算符不能当做左值使用;error: lvalue(左值) required as left operand of  assignment
    5 
    6 // (a < b ? a : 2) = 3;  // C++ 中报错; error: lvalue(左值) required as left operand of  assignment
    7     
    8 printf("a = %d, b = %d
    ", a, b); // C++ 中,a = 3,b = 2;

        2,C 语言中的三目运算符返回的是变量值;

           1,不能作为左值使用;

        3,C++ 中的三目运算符可直接返回变量本身;

           1,既可作为右值使用,又可作为左值使用;

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

       

    6,C++ 对三目运算符做了怎样的升级?这种升级的意义是什么?

        1,三目运算符如果可能的返回全部为变量,则它返回的是变量本身;

        2,意味着引用;

     

    7,C++ 中的引用:

        1,变量名回顾:

     

           1,变量是一段实际连续存储空间的别名;

           2,程序中通过变量来申请并命名存储空间;

           3,通过变量的名字可以使用存储空间;

        2,一段连续的存储空间只能有一个别名吗?

           1,不一定,例如人的名字可以有多个;

        3,在 C++ 中新增加了引用的概念:

           1,代码如下:

    1 int a = 4;
    2 int& b = a;  // b 为 a 的别名;
    3            
    4 b = 5;  // 操作 b 就是操作 a;

           2,引用可以看做一个已定义变量的别名;

               1,可以引用无数个别名;

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

               1,“&”标明标识符 name 是引用,是变量 var 别名;

               2,name 的类型必须和 var 相同;

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

               1,引用是别名,要给编译器说明;

               2,强类型;

       

    8,引用初体验实例分析:

        1,main.cpp 文件:

     1 #include <stdio.h>
     2 
     3 int main(int argc, char *argv[])
     4 {
     5     int a = 4;
     6     int& b = a;
     7 
     8     // float& b = a; // error: invalid initialization of reference of type 'float&'  from expression of type 'int';
     9 
    10     // float& b; // error: 'b' declared as reference but not initalized;
    11 
    12     // float& b = 1;  // 1 就是 1,不需要别名,对 const 引用例外;
    13     // error: invalid initialization of non-const(非常量) reference  of type 'float&' from a temporary(暂时的) of type 'int';
    14     
    15     b = 5;
    16     
    17     printf("a = %d
    ", a);  // a = 5;
    18     printf("b = %d
    ", b);  // b = 5;
    19     printf("&a = %p
    ", &a);  // &a = 0xbfe54aec;
    20     printf("&b = %p
    ", &b);  // &b = 0xbfe54aec;
    21     
    22     return 0;
    23 }

       

    9,C++ 对三目运算符做了什么?

        1,代码如下:

    1 int a = 1;
    2 int b = 2;
    3     
    4 (a < b ? a : b) = 3;  // 正确,返回 a 或 b 的引用,可作为左值;
    5 (a < b ? 1 : b) = 4;  // 错误,返回 1 或 b 的值,不能作为左值;

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

        3,当三目运算符的可能返回中有常量时,返回的是值;

       

    10,小结:

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

        2,bool 类型的值只可能是 true 和 false;

        3,C++ 中的引用可以看做变量的别名来使用(返回引用时);

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

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

    此文为作者学习唐佐林老师的学习笔记,仅为交流共享之用,由此带来的后果,与作者无关;转载请注明转载出处;难免有错,欢迎指正,联系方式qunchao24@sina.com。
  • 相关阅读:
    Java Spring Boot VS .NetCore (十) Java Interceptor vs .NetCore Interceptor
    Java Spring Boot VS .NetCore (九) Spring Security vs .NetCore Security
    IdentityServer4 And AspNetCore.Identity Get AccessToken 问题
    Java Spring Boot VS .NetCore (八) Java 注解 vs .NetCore Attribute
    Java Spring Boot VS .NetCore (七) 配置文件
    Java Spring Boot VS .NetCore (六) UI thymeleaf vs cshtml
    Java Spring Boot VS .NetCore (五)MyBatis vs EFCore
    Java Spring Boot VS .NetCore (四)数据库操作 Spring Data JPA vs EFCore
    Java Spring Boot VS .NetCore (三)Ioc容器处理
    Java Spring Boot VS .NetCore (二)实现一个过滤器Filter
  • 原文地址:https://www.cnblogs.com/dishengAndziyu/p/10902719.html
Copyright © 2011-2022 走看看