c++基础知识学习---第二天

本片博客是作者在学习c++的过程中的笔记记录,希望和各位读者一起学习交流

引用

  1. 引用概念:
    引用可以看做是一个已定义变量的别名
    语法:type & name = var; 通过name可以操作var指向的内存

  2. 引用是c++的语法范畴

  3. 普通引用在声明的时候必须用其他变量进行初始化
    引用作为函数参数声明时不进行初始化
    普通变量做函数参数:在主调函数进行调用的时候,将拷贝一份数据给形参
    引用做函数参数:在主调函数进行调用的时候,形参的意思就是实参的别名
    指针做函数参数:在主调函数进行调用的时候,将地址传给形参

  4. 引用的意义:
    引用作为其他变量的别名而存在,因此一些场合可以替代指针
    引用相对于指针有更好的可读性和实用性

  5. 引用的本质:(引用在定义的时候就必须进行初始化,而const修饰的常量在定义的时候也必须进行初始化)

    1. 引用在c++内部实现是一个指针常量
      eg:type &name === type *const name
    2. c++编译器在编译过程中使用常指针作为内部的实现,因此引用所占的空间大小于指针相同
    3. 从使用的角度,引用会让人误会其只是一个别名,没有自己的存储空间。这是c++为了实用性做出的细节隐藏
      在这里插入图片描述     在这里插入图片描述
  6. 函数返回值是引用(当返回引用的时候返回的是地址)
    1. 当返回的是栈变量(局部变量)的时候,不能成为其他引用的初始值,不能作为左值使用,因为在函数结束的时候,会释放局部变量,这种返回引用是非法的。
    2. 若返回的是静态变量或者是全局变量的时候(内存空间没有释放),既可以作为右值使用,也可以作为左值使用
    3. 函数返回值和返回引用区别
      函数返回值会产生一个临时变量作为函数函数返回值的副本,返回引用时返回对象本身(因此可以做左值)

  7. 指针的引用
    用法:
       int a = 0;
       int * b = &a;
       int * &c = b;

  8. 常引用:让变量拥有只读属性
    用法:
       用变量初始化引用
          int a;
          const int &b = a;
          a = 1;//正确
          b = 2;//错误
       用字面量初始化引用
          const int a = 40;//c++编译器会将a放在符号表中
          int &a = 41;//错误 引用就是给一个内村起别名,但是41没有地址
          const int &m = 43;//正确,会给43分配内存空间

c++对c的函数扩展

  1. inline内联函数
    c++中的const常量可以替代宏常数定义
    如:const int A = 3; #define A 3
    c++中可以使用内联函数代替宏代码片段
    c++中使用inline关键字声明内联函数
    内联函数声明时inline关键字必须和函数定义(函数的实现)结合在一起,否则编译器会直接忽略内联请求
    结论:
    1. 内联函数在编译时直接将函数体插函数调用的地方
    2. inline只是一种请求,编译器不一定允许这种请求
    3. 内联函数省去了普通函数调用时压栈,跳转和返回的开始
    4. 内联函数不能存在任何形式的循环语句,不能存在过多的条件判断语句
  2. 默认参数
    1. c++可以在函数声明时为参数提供一个默认值,当函数调用时没有指定这个参数的值,编译器会自动用默认值代替
    2. 一旦在一个函数调用中开始使用默认参数值,那么这个参数后的所有参数都必须使用默认值参数
  3. 函数占位参数
    占位参数只有参数类型声明,没有参数名声明,一般情况下,在函数体内部无法使用占位参数
  4. 函数重载
    1. 概念
      函数名相同,参数不同的函数称为函数重载
    2. 函数重载的判断标准
      函数重载至少满足下面的一个条件:
      参数个数不同、参数类型不同、参数顺序不同
    3. 函数返回值不是函数重载的判断标准
    4. 函数调用标准
    5. 函数重载的本质是相互独立的不同函数(静态链编)
  5. 函数重载和函数指针结合
    当使用重载函数名对函数指针进行赋值时,根据重载规则挑选与函数指针参数列表一致的候选者。严格匹配候选者的函数类型与函数指针的函数类型
下面的是笔者的微信公众号,欢迎关注,会持续更新c++、python、tensorflow、机器学习、深度学习等系列文章

                      在这里插入图片描述

发布了38 篇原创文章 · 获赞 49 · 访问量 6946

猜你喜欢

转载自blog.csdn.net/Xiao_Jie123/article/details/104158788