zoukankan      html  css  js  c++  java
  • 布尔类型、操作符别名、C++函数、动态内存分配(newdelete)、引用(day02)

    六 C++的布尔类型
    1 bool类型是C++中基本类型,专门表示逻辑值:true/false
    2 bool在内存上占一个字节:1表示true,0表示false
    3 bool类型可以接收任意类型和表达式的结果,其值非0则为true,值为0则为false
    
    七 操作符别名(了解)
    &&  --》 and
    ||  --》 or
    {   --》 <%
    }   --》 %>
    ...
    
    八 C++函数
    1 函数重载
    strcpy(char*,const char*)
    strcpy(char*,const char*,int)
    1)定义
      在相同的作用域,定义同名的函数,但是它们的参数表必须有所区分,这样的函数构成重载关系。
      注:重载和返回返回类型无关
    2)函数重载匹配
      调用重载关系函数函数,编译器根据实参与形参匹配程度,自动选择最优的重载版本。
      当前编译器的匹配原则 g++ V4.8.1:
      完全匹配>常量转换>升级转换>降级转换>省略号匹配
    3)函数重载原理
      C++编译器通过函数换名,将参数表的信息整合到新的函数名中,实现解决函数重载与名字冲突的矛盾
    eg:
      代码里面写的函数:
      void func(int i,double d);
      void func(int i);
      编译之后函数名将改变:
      func(int,double)-->_Z4funcid
      func(int)-->_Z4funci
      
      笔试题:函数声明中加入extern "C"作用?
      要求C++编译器不会函数做换名,便于C程序调用该函数。
      语法:
      extern "C" void func(..){..}
      ----------------------------
      extern "C"{
          void func1(){}
          void func2(){}
      }
    -------
    2 函数的缺省参数(默认实参)
    1)可以为函数的部分参数和全部参数指定缺省值,调用该函数,如果不给实参,就取缺省值作为相应的形参值。
    eg:
      void func(int a,int b,int flag=0){..}
      int main(void){
          func(10,20,1);
          func(10,20);
      }
    2)缺省参数必须靠右,如果一个参数有缺省值,那么这个参数的右侧所有参数都必须带有缺省值。
    
    3)如果函数的定义和声明分开,缺省参数应该写在函数的声明部分,而定义部分不写。
    void func(){..} -->函数的定义
    void func();    -->函数的声明
    
    3 函数的哑元参数
    1)定义:只有类型而没有变量名的形参称为哑元
    eg:
     void func(int a,int/*哑元*/){}
    2)使用哑元的场景
    --》为了兼容旧代码
    算法库:
         void math_func(int a,int b){...}
    使用者:
        int main(void){
            math_func(10,20);
            ...
            math_func(20,30);
        }
    ------------------------------------
    升级算法库:
         void math_func(int a,int=0){...}
    
    --》操作符重载时,区分前后++/--(后面讲)
    
    4 内联函数(inline)
    //笔试题:inline关键字的作用
    1)定义
      使用inline关键修饰的函数,表示这个函数是内联函数,编译器将尝试做内联优化,避免函数调用的开销,提高代码的执行的效率。
    2)适用场景
    --》多次调用的小而简单的函数适合内联
    --》调用次数极少获取大而复杂的函数不适合内联
    --》递归函数不适合内联
    
    注:内联只是一种建议而不是强制要求,能否内联主要取决于编译器,有些函数不加inline关键字修改也会被默认处理为内联,有些函数即便加了inline关键字也会被编译器忽略。
    ---------------------
    笔试题:
    1)代码片段1
    for(int i=0;i<100000;i++)
       for(int j=0;j<100;j++)
          ... 
    2)代码片段2
    for(int i=0;i<100;i++)
       for(int j=0;j<100000;j++)
          ...
    ---------------------
    九 C++的动态内存分配
    //笔试题:C++中new/delete和C中malloc和free区别
    1 回顾C中动态分配
    1)分配:malloc()
    2)释放:free()
    3)错误:返回值
    eg:
      int* p = (int*)malloc(sizeof(int));
      *p = 100;
      free(p);//避免泄露
      p = NULL;//避免使用野指针
    
    2 C++使用运算符分配动态内存
    1)分配:newnew[]
    2)释放:deletedelete[]
    3)错误处理:异常(后面讲)
    eg:
       //int* p = new int;//分配不初始化
       //*p = 100;
       int* p = new int(100);//分配同时初始化
       delete p;
       p = NULL;
       -----------------
       int* parr = new int[10];//分配数组
       parr[0]=10;
       parr[1]=20;
       ...
       delete[] parr;
       parr = NULL;
    --------------------------
    十 C++的引用(Reference)
    1 定义
    1)引用就是某个变量的别名,对引用的操作与对该变量的操作完全相同。
    2)语法规则
     类型& 引用名 = 变量名;
     注:引用在定义时必须初始化,而且初始化以后不能修改引用的目标。
     注:引用类型和它所绑定的目标变量类型要一致
     eg:
     int a = 10;
     int& b = a;//b就是a的别名
     b++;
     cout << a << endl;//11
     int c = 20;
     b = c;//将c的值赋值给b(a)
     cout << a << endl;//20
     
    2 常引用
    1)定义引用时加const修饰,即为常引用,不能通过常引用修改引用的目标。
      const 类型& 引用名 = 变量名;
    eg:
      int a = 10const int& b = a;//b就是a的常引用
      b = 200;//error
    2)普通的引用只能引用左值,而常引用也叫做万能引用,既能引用左值,也能引用右值。
    ==================
    注:关于左值和右值
    1)左值:可以放在赋值运算符的左侧
    -->普通变量都是左值
    -->前++/--表达式结果是左值
    -->赋值表达式的结果是左值
    eg:
      int a = 1;
      ++a = 20;//ok
      cout << a << endl;//20
      ++++++a;
      cout << a << endl;//23
    eg:
      int a = 3,b = 5;
      int c = 0;
      (c = a) = b;//ok
      cout << c << endl;//5
    
    2)右值:只能放在赋值运算符右侧
    --》字面值常量
    --》大多数表达式的值
    eg:
      int a = 3,b = 5;
      (a + b) = 10;//error,a+b的结果是右值  
    --》函数返回值
    eg:
      int foo(void){
          int a = 100;
          return a;//分配临时变量=a
      }
      int main(void)
      {
          int res = foo();//函数调用结果是临时变量
          cout << res << endl;//100
          int& r = foo();//error
          const int& cr = foo();
          return 0;
      }
  • 相关阅读:
    小程序组件化、自定义组件 、自定义组件练习,组件与页面互相传值,插槽(slot)、 component构造器
    小程序事件的介绍、事件对象、事件传值、事件冒泡和捕获,bind和catch的区别
    小程序列表渲染、模板语法、wxml的引入、wxs
    小程序中的常用组件,及组件的共同属性、wxcss、weui-wxss、Mustache语法、逻辑判断wx:if、wx:elif、wx:else
    小程序启动时加载顺序,小程序初始化,页面初始化
    label和input标签在兼容模式下 不能关联?解决方案
    当一个cdn挂掉之后,让加载另一个cdn
    将summernote在vue项目中封装成组件
    wangEditor3富文本编辑器的使用
    git中 连接远程仓库及tag切换的使用
  • 原文地址:https://www.cnblogs.com/Kernel001/p/7729382.html
Copyright © 2011-2022 走看看