IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> c++-基础部分-函数-小总结 -> 正文阅读

[C++知识库]c++-基础部分-函数-小总结

清华大学出版社《c++程序设计》(第三版)中简单总结的一些知识点

  • 函数体没有return则执行至花括号,有return的话,遇到第一个return就立即返回到调用函数
  • C++不会自动将精度较高的实参,转化为精度较低的形参,如果确实要用,最好能显式地完成这一转换。
  • Call by value传值 int func(int a,int b)
  • Call by reference传引用(实参只能是变量,对实参进行了修改)int func(int &a,int &b)
  • 引用返回 T& func(int I, T&z) return z 返回的引用是只能是参数列表中的引用
  • 形参、实参、默认参(必须是参数列表中尾部的参数)
  • 内联参数(inline指示编译器将函数代码复制到程序中所有调用这个函数的地方,减少调用带来的开销,却使代码的规模增大(内联函数有了改动,所有调用它的源函数都必须重新编译))
  • 函数重载:允许同名参数表示类似的操作,只要这些函数有不同参数(个数、类型、顺序),这一点与C不同,得益于函数原型的概念。(有函数重载时,千万记得函数声明)
  • 存储类别:(变量在声明的时候需要指明变量的存储类别,这里要注意声明和定义的区别,函数或变量在声明时没有分配内存空间的,只有在定义的时候才会。对于变量,同一个文件里,定义和声明没有明显的区别,而在同一个工程,多个文件里,变量和声明才有区别,这里需要注意。相关链接
    1. 自动储蓄类别:(比如形参)
      auto(默认,只在定义它的程序被调用期间存在)、
      register(被分配在CPU寄存器中,执行效率高,适合循环次数较多的循环控制变量);
    2. 静态储蓄类别:(一直存在)
      extern(总和全局变量联系在一起,在整个文件范围内都有效,最好在头文件里声明,
      在同一个工程,在多个文件中变量的声明和定义才有区别。比如说在 first.c 文件中先定义了一个全局变量 int a; 我在 second.c 中要访问这个 a ,这时我们需要在 second.c 这个文件中用 extern 声明一下)
      static(虽然一直存在,但作用域与与自动变量相同,其他程序不能用它,但再次进入定义它的函数时,又可以继续使用,而且保留了之前的值,全局变量虽然也可以,但其它程序也可以用它)static 初始化问题:反复调用时初始化只有一次但是赋值可以多次
  • 标识符 作用域:
    1. 块作用域(局部作用域):程序块{花括号}、函数体、控制结构语句 “最近嵌套原则”;
    2. 函数作用域:标号(在goto语句中),在整个函数范围内;
    3. 函数原型作用域:最小,指函数原型声明时形参的作用范围;
    4. 文件作用域:在函数和类之外声明的标识符,从声明点开始,到文件结束。
  • 递归函数:函数直接或间接调用自己,“递归调用”recursive call。(例:阶乘,汉诺塔)
    1. 先进后出特征,最先进入的函数调用,最后结束并返回,最后开始执行的函数调用最先结束,并得到调用结果。
    2. 每次函数的调用,都会被分配储存空间,形参和局部变量都会有不同的储蓄空间。
      (例如汉诺塔,本质从大的往小的剥离,要把N-1那一堆看做一个整体,来解决,不要从小的开始)
  • 预处理指令(不是c++语句,不用封号结尾,由预处理程序执行,在编译之前处理完毕,结果作为编译器的输入)
    1. #include 尖括号代表在固定目录里中寻找被包括文件,通常标准库里的;使用双引号时,在被编译程序所在目录中寻找被包括文件
    2. #define定义符号常量或宏,(宏的替换由预处理程序完成,发生在编译之前的预处理阶段,而函数调用发生在目标代码执行时,通过宏扩展产生的代码执行效率高,与内联函数类似。但定义宏比定义函数难度更大)
    3. #if(常量表达式) #else #endif 条件编译指令,常量表达式为true,才编译他们之间的程序段;#ifdef(宏替换名) #ifndef ,只有定义了宏替换名,才会编译输出

关于返回值:内部类型是不会作为左值用的,返回值为const或者不是const没有影响,因为就算返回值被定义成const,也只是作为返回值的变量不能被修改,返回值在被赋予之前已经变成副本了,它可以被赋给任何的const或非const类型变量,完全不需要加上这个const关键字。但作为自定义类,就不行了,const返回值不能作为左值。

关于引用:对于一般引用,引用的类型必须与其引用的类型一致,非常量引用就不能引用常量对象,而const引用就没事了,他可以随便引,即使所引用的不是常量对象,反正不能通过引用去修改引用对象就行了,甚至:
double deval=3.14;
const int &a=deval;都是对的,因为实际上编译时为:
const int temp=deval;
const int &a=temp; 先进行了类型转换,生成一个临时量。
因此引用作为函数参数时,尽量使用常量应用,他能接受更多类型的参数,而const对象、字面值或需要类型转换的对象传递是不能传给给普通的引用形参

封面

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-08 11:36:46  更:2021-10-08 11:38:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 5:27:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码