专栏首页HeaiKunC++ Primer ---函数(读书笔记)

C++ Primer ---函数(读书笔记)

函数基础

一个函数是由 返回类型 函数名称 0个或多个形参以及函数体构成。 函数调用时 使用函数名称加小括号,小括号里面是实参。 函数调用时,完成部分的工作:

  1. 使用实参进行初始化函数对应的形参
  2. 将控制权交给被调用的函数

当函数遇到return 时 函数返回,函数返回时完成两个部分的工作:

  1. 将return 后面的值返回(如果有的话)
  2. 将控制权由被调用函数交给主调函数

形参和实参

实参是形参的初始值,要和形参一一对应,如果没有形参可以使用void来表示。

形参和函数体内部定义的变量 统称为局部变量。

形参是一种自动对象,只在函数体内部生效。

如果局部变量定义本身有初始值,就用该初始值进行初始化,否则就是默认初始化,有可能产生未定义的垃圾值。

局部静态对象当局部对象使用 static 修饰时,就是局部静态对象。局部静态对象只有在第一次执行定义的时候进行初始化。如果没有显式的初始化则默认初始化为0,局部静态队形的生命周期是整个程序结束,当所在函数执行完毕时,局部静态对象仍然有效。

函数的声明

函数和对象一样,需要先声明在使用。函数只能定义一次,但是可以声明多次。只有函数永远不会被调用时才可以只有声明没有定义。 声明和定义的区别是 声明没有函数体,定义有函数体。 函数的声明和定义应该分离,声明放到头文件中,定义放到源文件中,要注意的是 函数声明的头文件应该被包含在定义函数的源文件中。

参数传递

传值参数将初始值拷贝给变量,这是对变量的改变,不会影响初始值。如果传递的是指针,拷贝指针的值给形参对象,两个指针对象不同,但都指向同一个地址。

传引用参数传引用参数时,形参只是实参的一个别名,不会产生拷贝操作,实际上是一个对象。形参不会创建新的对象。 当形参是数组时,编译器会将数组转换成对应的指针类型,当函数传递一个数组时,实际上传递的是指向数组首元素的指针。要注意的是 要保证数组使用时 不要越界。

含有可变形参的函数 可以使用 initializer_listlst 来作为形参,可以实现可变数量参数的情况。 也可以使用省略符形参,省略符形参只能适用于C/C++ 通用类型,大多数类类型的对象在传递给省略符形参时都无法正确拷贝。

返回类型和return语句

无返回值的return 只能用在返回类型void 的函数中,这样的函数不强制要求有return语句,在函数末尾有隐式的return。 返回一个值的方式和初始化一个变量或者形参的方式是一样的,返回值用于初始化调用点的一个临时值,该临时值就是函数调用的的结果。 返回的结果 拷贝复制到接收函数返回值的变量中。 局部变量随着函数的结束,而被释放,因此 不要返回 局部变量的引用或者指针。

函数重载

在同一个作用域中,几个函数的名字相同但是形参不同,我们称之为重载函数。 编译器会根据传递的实参类型去推断要调用的是哪一个函数。注意 main函数不能重载。 只有在形参数量和形参类型不同时才能正常重载。 要注意const类型和非const类型在重载的时候要注意,只有底层const才能正常区别,顶层const无法无别。

特殊用途语言特性

  • 默认实参
  • 内联函数
  • constexpr函数

默认实参: 定义的时候将形参赋值 int func(int a=1, int b=2, int c=3 ); 调用的时候: func(); ---------等价 func(1, 2, 3); func(4); ---------等价 func(4, 2, 3); func(3.6); ---------等价 func(3, 6, 3); 只能省略尾部实参。 局部变量不能作为实参。

内联函数 内联函数可以避免函数调用的开销 内联机制用于优化规模较小,流程直接,调用频繁的函数。

constexpr 函数 定义constexpr函数和其他函数类似,要注意:函数的返回类型及所有的形参类型都得是字面值类型。而且函数体重只能有且只有一条return语句。 constexpr 函数不一定返回常量表达式。 内联函数和constexpr 函数放在头文件内。

调试

assert 预处理宏 assert(expr) 先对expr求值,如果表达式为假(为0),assert 输出信息并终止程序的执行,如果表达式为真(非零),assert 什么也不做。 assert 依赖 NDEBUG宏,如果 定义了NDEBUG宏,assert 什么都不做。

本文分享自微信公众号 - HeaiKun(hhk-develop),作者:hehk

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-04-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • CSAPP第三章(3)

    前面讲了汇编的基本语法,后面主要讲的就是 相对于C语言这样的高级语言中的一些语法结构进行汇编级别的解析。当然对于再复杂的C语言结构语法,最终都是那些简单的汇编语...

    HeaiKun
  • CSAPP之信息(上)

    许多操作系统使用8位的块作为最小可寻址内存单元,我们把内存看做一个很大的数组,最小可寻址单元的大小就是一个数组成员的大小。

    HeaiKun
  • C++ Primer ---类(读书笔记)

    使用struct 或者class可以创建一个类,类里面包含成员变量,成员函数。如下:

    HeaiKun
  • Python函数基本使用原理详解

    函数的使用分为定义阶段与调用阶段,定义函数时只检测语法,不执行函数体代码,函数名加括号即函数调用,只有调用函数时才 会执行函数体代码 调用函数发生的事情

    砸漏
  • 函数

    在 JS 里面,可能会定义非常多的相同代码或者功能相似的代码,这些代码可能需要大量重复使用。

    星辰_大海
  • 19. 再说函数~那些不得不知道的事儿

    前面的课程中,我们已经对函数有了简单的了解 函数的声明、函数的的调用、函数的参数以及返回值等等

    大牧莫邪
  • 码如其人,同学你能写一手漂亮的Python函数吗

    在机器学习中,我们经常需要使用类和函数定义模型的各个部分,例如定义读取数据的函数、预处理数据的函数、模型架构和训练过程的函数等等。那么什么样的函数才是漂亮的、赏...

    用户2769421
  • 提高代码质量:如何编写函数

    函数是实现程序功能的最基本单位,每一个程序都是由一个个最基本的函数构成的。写好一个函数是提高程序代码质量最关键的一步。本文就函数的编写,从函数命名,代码分布,技...

    哲洛不闹
  • 提高代码质量:如何编写函数

    函数是实现程序功能的最基本单位,每一个程序都是由一个个最基本的函数构成的。写好一个函数是提高程序代码质量最关键的一步。本文就函数的编写,从函数命名,代码分布,技...

    哲洛不闹
  • 什么是python的函数体

    函数的概念,函数是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集

    砸漏

扫码关注云+社区

领取腾讯云代金券