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。
  • 相关阅读:
    Android按钮事件的4种写法
    VB.NET转C#代码的工具
    C# FTP操作类
    Linq一对多联合查询
    软件工程师面试题(一)
    一道网传上海幼儿园升小学的数学题
    csdn博客刷点击率(java代码)
    .NET高端职位招聘要求
    csdn博客刷粉代码
    jQuery Ajax无刷新操作
  • 原文地址:https://www.cnblogs.com/dishengAndziyu/p/10902719.html
Copyright © 2011-2022 走看看