• C++ 函数探幽


    内联函数:

    工作原理:

    将一些短小的函数, 声明为inline类型, 编译器在编译时,会直接替换函数调用处的代码

    为什么会有内联函数:

    在程序运行时, 如果调用了函数, 会经历以下步骤:

    1. 拷贝参数,内存中跳转到当前函数的机器码内,复制参数, 运行代码

    2. 将函数的返回值放在CPU寄存器或某个内存地址中

    3. 回到被调用的代码处,取出返回值

    可以看到 ,一个函数调用会经历很多步骤, 这些步骤也会加大内存开销,降低程序运行效率。

    但是有些函数的复用性很高, 写成函数用来调用, 会减少代码量, 所以就出现了内联函数

    直接替换代码行,减少了来回跳转的过程

    但是也不是每个函数都要写成内联函数的

    内联函数只建议一些代码量小, 复用性高的函数使用。

    引用变量:

    使用引用作为函数的参数时,应尽量使用const 修饰符, 原因如下:

    1. 防止代码无意中修改数据的值

    2. const 形参可以同时接收const 和非const 参数,而非const形参,只能接受非const 参数

    3. const 引用使函数能够正确生成并使用临时变量。

    当参数类型和函数类型不匹配时,如果你意图是修改实参, 那么C++ 默认的机制会阻止这种行为

    假如参数不匹配, C++ 会生成一个临时的类型正确的变量, 并将类型不匹配的实参,强制转换为 和形参对应类型的变量

    此时, 函数中的引用形参就会指向新的临时变量, 所以不会修改实参的值。

    将引用作为返回值时需要注意的事项:

    为何要将引用作为返回值:

    函数结束时,会将返回值复制到寄存器或者内存中某个位置上,如果这个值只是一个int等基本类型,这样没什么影响

    但是如果返回一个非常大的数据,那么复制返回值的这一步, 会降低程序的运行效率

    但是如果此时返回一个引用, 那么这个引用最大的长度也不过是内存的大小,会提升程序的效率

    但是需要注意的, 返回的引用不能是函数中生成的临时变量(局部变量)

    因为局部变量在函数运行结束后就会被释放,此时如果直接访问返回值, 会导致程序访问空引用, 进而崩溃

    应当返回函数参数列表中的应用, 因为这个引用是在函数调用之前就已经指向的内存, 在函数运行结束之后返回值 也能访问的到。

    将引用用于类对象需要注意的事项:

    对象,继承,和引用:

    ofstream 和 ostream类:

    这两个类是继承关系,ofstream继承于ostream

    因为这两个类可以进行强制类型转换

    所以ostream & 的引用可以指向 ofstream 对象

    总计, 合适使用引用作为参数:

    一、只是传递值,而不修改值:

    1,如果数据对象很小, 比如内置的基本数据类型, 按值传递

    2,如果数据对象是数组 , 则按指针传递, 因为这是唯一的选择,因为不修改值,所以要在函数声明中加入const

    3,如果数据对象是较大的结构,则按const 引用或const指针传递, 提高程序运行效率, 节省复制数据对象所需的时间

    4,如果数据对象是类对象, 则使用const 引用, 类设计的语义常常要求使用引用, 这是C++新增这项特性的主要原因, 也是标准方式。

    二、修改调用的参数

    1,如果是内置数据类型, 使用指针

    2,如果是数组,则只能使用指针

    3,如果是结构,使用指针或引用。

    4,如果是对象,则使用引用。

  • 相关阅读:
    大数据概述
    [转载]Python 资源大全中文版
    dataTaDataTable 详细教程
    DataTable 中文国际化
    ipython notebook教程
    Django查询操作
    Django模型的元数据Meta
    如何使用命令提示符进入mysql
    教你如何查看占用端口
    php简易计算器实例
  • 原文地址:https://www.cnblogs.com/derek-dhw/p/10462847.html
Copyright © 2020-2023  润新知