我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C++中的函数知识点大全

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C++中的函数知识点大全

(一)函数使用规则

  1. 函数的定义不能嵌套但调用可以嵌套

  2. 在函数调用时,如某一默认参数要指明一个特定值,则有其之前所有参数都必须赋值

  3. 赋默认实参时 一旦某个形参被赋予了默认值,它后面的所有形参都必须有默认值,因为设置默认参数的顺序是自右向左;且注意默认值不可以是局部变量

  4. 函数参数的默认值可以是表达式

  5. 如果在函数定义时设置了默认参数,则就不能在函数声明时再次设置,反之亦然

  6. 函数只有一个 返回值,除void类型函数

  7. 函数调用可以出现在执行语句中,也可以出现在表达式中,甚至还可以作为一个函数的实参,但不可作为函数的形参,因为函数返回值存在寄存器中, 没有地址, 不能作为形参

  8. 函数是一种特殊的数据类型,正确

  9. 当函数不是void类型且函数体内没有return语句时,此时函数的返回值与返回类型相同但内容却是随机的一个值

  10. C++所有的函数本质上都是外部函数(可延申至其他文件中使用),故extern关键字可省略

  11. 如果函数的形参是指向普通变量的指针变量,实参只能用指向普通变量的指针,不能用指向const变量的指针,反之则都可以用

  12. 当函数自变量个数不确定时,系统不自动检测自变量

  • 函数三种传参:

① 值传递:会为形参重新分配内存空间 ,将实参的值拷贝给形参,形参的改变不会影响实参的值,函数被调用结束后,形参被释放。

② 地址的传递:形参为指针变量,将实参的地址传递给函数,可以在函数中改变实参的值。调用时为形参指针变量分配内存,结束时释放指针变量。

③ 引用传递:不会为形参重新分配内存空间,形参只是实参的别名,形参的改变只会影响实参的值,函数调用结束后,形参不会被释放。

(二)函数的使用

  • 建立自定义函数,调用时只需要明白函数的功能即可,故提高了程序的可读性

  • sizeof 返回的值表示的含义如下(单位字节):

​ 数组 —— 编译时分配的数组空间大小;
​ 指针 —— 存储该指针所用的空间大小(存储该指针的地址的长度,是长整型,应该为 4 );
​ 类型 —— 该类型所占的空间大小;
​ 对象 —— 对象的实际占用空间大小;

​ 函数 —— 函数的返回类型所占的空间大小。函数的返回类型不能是 void

  • sizeof(float)是(整型)类型表达式

  • Math.floor() 表示向下取整,返回double类型

​ Math.ceil() 表示向上取整,返回double类型

​ Math.round() 四舍五入,返回int类型

  • 用户可以重载(不能重定义)标准库函数,若如此,该函数将失去原有含义;但若已包含标准库头文件及相关命名空间,则系统不允许用户重新定义标准库函数,因为两个相同作用域内的函数 如果除了返回值类型外 的函数要素都相同 那么编译器会报重定义错误

  • 函数返回值作为右值,被const修饰无效,故此时const相当于没修饰

  • 如果参数类型不一致,则函数调用时按形参类型隐式类型转换实参

  • main函数默认返回一个int类型的值

  • 将一个字符串传递到函数中,传递的是地址,则函数形参既可以用字符数组,又可以用指针变量

  • 函数的返回值可以是引用类型且函数返回引用可以作为左值

  • 函数的返回类型可以是结构体类型,这时函数将返回一个结构体对象

  • 所有的函数在定义它的程序中都是可见的

(三)预处理命令(包括宏定义)

  • 预处理命令行不能以分号结尾

  • 预处理命令行可以出现在程序的最后一行

  • 预处理命令行作用域是从出现位置开始到源程序文件末尾

  • 凡是以#号开头的行,不一定都为编译预处理命令行

  • 在源文件的一行上不可以有多条预处理命令

  • 预处理不做语法检查

  • C++在编译前由预处理器对预处理命令进行处理(故在编译前被执行),编译时进行语法分析

  • 宏替换不占用程序的运行时间,只占编译时间

(四)内联函数与宏的区别

  • 内联函数在运行时可调试,而宏定义不可以;
  • 编译器会对内联函数的参数类型做安全检查或自动类型转换(同普通函数),而宏定义则不会;
  • 内联函数可以访问类的成员变量,宏定义则不能;
  • 在类中声明同时定义的成员函数,自动转化为内联函数。

(五)函数与宏的区别

  • 宏做的是简单的字符串替换(注意是字符串的替换,不是其他类型参数的替换),而函数的参数的传递,参数是有数据类型的,可以是各种各样的类型.

  • 宏的参数替换是不经计算而直接处理的,而函数调用是将实参的值传递给形参,既然说是值,自然是计算得来的.

  • 宏在编译之前进行,即先用宏体替换宏名,然后再编译的,而函数显然是编译之后,在执行时,才调用的.因此,宏占用的是编译的时间,而函数占用的是执行时的时间.

  • 宏的参数是不占内存空间的,因为只是做字符串的替换,而函数调用时的参数传递则是具体变量之间的信息传递,形参作为函数的局部变量,显然是占用内存的.

  • 函数的调用是需要付出一定的时空开销的,因为系统在调用函数时,要保留现场,然后转入被调用函数去执行,调用完,再返回主调函数,此时再恢复现场,这些操作,显然在宏中是没有的.

  • 宏替换不占用程序的运行时间

  • 宏与类型无关,但是c++中函数必须指定返回类型,故宏可以做函数不能做的事

(六)函数模板

1.函数模板的格式如下:

Template <class 形参名,class 形参名,......> 返回类型函数名(参数列表){函数体}

其中,class可以用typename关键字代替

2.函数模板调用时不需要显式指定类型,系统自动匹配参数类型,若没有合适的,会进行报错。而类模板使用需要显式指定类型,且对于函数模板注意要返回值和参数的类型一致

3.模板函数和普通函数都符合条件时,优先执行普通函数

4.模板特化:(当函数模板需要对某些类型进行特化处理,称为函数模板的特化,类模板的特化同理)

  • ① 因为很多时候,我们既需要一个模板能应对各种情形,又需要它对于某个特定的类型有着特别的处理,故出现了模板特化
  • ① 特化整体上分为全特化和偏特化
  • ② 全特化:就是模板中模板参数全被指定为确定的类型。 全特化也就是定义了一个全新的类型,全特化的类中的函数可以与模板类不一样
  • ③ 偏特化:模板中的模板参数没有被全部确定,需要编译器在编译时进行确定
  • ④ 对主版本模板类、全特化类、偏特化类的调用优先级从高到低进行排序是:全特化类>偏特化类>主版本模板类
  • ⑤ 当函数调用发现有特化后的匹配函数时,会优先调用特化的函数,而不再通过函数模版来进行实例化
  • ⑥ 模板特化相当于在声明了类模板等后声明需要模板特化然后让接下来的代码自己使用一个类型,故不能单独使用,例;![img](file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps386C.tmp.jpg)

5. 模板特化实现:template<> + 完全和模板类型没有一点关系的类实现或者函数定义;

  • ① 特化为绝对类型(全特化):例:template<>class Compare{...}; // 特化为float类型,此为函数模板特化;函数模板只能全特化,没有偏特化
  • ② 特化为引用,指针类型(半特化、偏特化):例:template struct iterator_traits<_Tp*> {};
  • ③ 特化为另外一个类模板(偏特化):例:template class Compare<vector>{};

6. 类模板的成员函数都是函数模板;没使用过的成员函数(即函数模板)不会被实例化

7. 函数模板必须由程序员实例化为可执行的函数

8. 函数模板的虚拟类型名是在编译阶段确定实际类型的

(七)函数重载

  • 使用重载函数编程序的目的是:使用相同的函数名调用功能相似的函数;使用方便,提高可读性

  • 重载函数的形参(个数或类型)必须不同

  • void x(int,char ch=’a’)与void x(int)可以在同一程序中定义,但不可以重载

(八)内联函数

内联(置)函数inline:

引入内联函数的目的是为了解决程序中函数调用的效率问题;程序在编译器编译的时候,编译器将程序中出现的内联函数的调用表达式用内联函数的函数体进行替换,而对于其他的函数,都是在运行时候才被替代。这其实就是个空间代价换时间的节省(弊:代码被多次复制,增加了代码量,占用更多的内存空间),故在当函数代码较小并且被频繁调用的时候。在使用内联函数时要留神:

① 使用基类指针或引用来调用虚函数时,它都不能为内联函数(因为调用发生在运行时)。但是,使用类的对象(不是指针或引用)来调用时,可以当做是内联,因为编译器在编译时确切知道对象是哪个类的

② 默认情况下,在类体中定义的成员函数若不包括循环等控制结构,符合内联函数要求时,C++会自动将它们作为内联函数处理(不是所有成员函数都是内联函数)

③ 内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方,不是运行时

④ 内联函数在编译时做参数类型检查

⑤ 在内联函数中不允许使用循环语句(for,while)和switch结果,带有异常接口声明的函数也不能声明为内联函数。另外,递归函数(自己调用自己的函数)是不能被用来做内联函数的。内联函数只适合于只有1~5行的小函数

⑥ 内联函数的定义必须出现在内联函数第一次调用之前

⑦ 定义内联函数inline写类型前面

⑧ 关键字inline 必须与函数定义体放在一起才能使函数成为内联,仅将inline 放在函数声明前面不起任何作用

⑨ 如果在类外定义inline函数,则必须将类定义和成员函数定义放在同一头文件中,否则编译时无法进行置换

⑩ 头文件中不仅要包含 inline 函数的声明,而且必须包含定义,且在定义时必须加上 inline

⑪ 不管是 class 声明中定义的 inline 函数,还是 class 实现中定义的 inline 函数,不存在优先不优先的问题

⑫ 内置函数不需要使用堆栈进行现场的保护与恢复

⑬ 用 inline 修饰的函数原型其对应的函数也将成为内联函数 - 错(自己理解:inline为建议型关键字)

⑭ 内联函数可以是静态的

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C++中的函数知识点大全

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C语言函数的知识点有哪些

这篇文章主要介绍“C语言函数的知识点有哪些”,在日常操作中,相信很多人在C语言函数的知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言函数的知识点有哪些”的疑惑有所帮助!接下来,请跟着小编一起来
2023-06-30

详解PHP中数组函数的知识点

PHP的数组是一种很强大的数据类型,与此同时PHP内置了一系列与数组相关的函数可以很轻易的实现日常开发的功能。所以本文便总结了一些在常见场景中利用PHP内置函数的实现方法,希望对你有所帮助
2022-11-21

C++函数与重载知识点有哪些

本文小编为大家详细介绍“C++函数与重载知识点有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++函数与重载知识点有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。函数的默认(缺省)参数1、默认参数的定
2023-06-30

Python3中zip()函数知识点小结

本文主要介绍了Python3中zip()函数知识点小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-02-28

python中函数知识点有哪些

这篇文章主要介绍python中函数知识点有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!函数参数的两大分类形式参数函数定义阶段括号所写的参数实际参数函数调用阶段括号内传入的参数形参与实参的关系可以将形参看成是变量
2023-06-25

C语言之函数知识点实例分析

这篇文章主要介绍了C语言之函数知识点实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言之函数知识点实例分析文章都会有所收获,下面我们一起来看看吧。一、引入引例:定义6个整型变量a,b,c,d,e,f,
2023-07-02

Python基础知识大全:字符编码转换、函数

  字符编码转换  字符编码转换最重要的一点就是,切记unicode是编码之间的中转站,若unicode不是目标编码或者原始编码,那么任何两个编码相互转换都需要经过unicode(见下图)。  需要注意的是,python的默认编码是ASCI
2023-06-02

信息安全工程师考试知识点:Hash函数

  很多考生在备考软考信息安全工程师考试,今天编程学习网小编为大家整理了信息安全工程师考试知识点:Hash函数,供大家备考复习。  【考法分析】  本考点主要是对Hash函数相关内容的考查。  【要点分析】  1.HASH函数应满足的性质。P119页。  2.SHA算法流程。P122页。  【备考点拨】  了解并掌握相关知
信息安全工程师考试知识点:Hash函数
2024-04-18

C#中所要知道的知识点有哪些

本文小编为大家详细介绍“C#中所要知道的知识点有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“C#中所要知道的知识点有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1.在C#中,类名首字母需大写。如:c
2023-07-05

C++中引用的知识点有哪些

本篇内容主要讲解“C++中引用的知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++中引用的知识点有哪些”吧!引用的概念引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不
2023-06-29

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录