C++知识点之inline函数、回调函数和普通函数

C++中的函数分为普通函数、内联函数和回调函数。

inline函数

什么是inline函数

inline函数是用来代替宏定义的一种方式,它是一种让编译器直接将函数体插入到调用函数处的编译选项。

inline函数的特点

1.为了提高程序的运行效率,编译器将在每个调用函数的位置插入内联函数的代码执行,这将导致程序的体积增加。

2.内联函数不允许递归调用。

3.inline函数的定义通常放在头文件中。

4.编译器可能不会将所有函数都内联,这取决于编译器的解析和情况。

5.具有内联属性的成员函数,在类定义之外定义时,必须加上inline关键字;

6.虚函数和析构函数不能是内联函数。

inline函数的示例

inline int add(int a,int b)
{
    return a+b;
}
int main()
{
    int a=1,b=2,ret;
    ret = add(a,b);
    return 0;
}

回调函数

什么是回调函数

回调函数是一种通过函数指针调用的函数。当一个函数需要调用另一个函数来完成某个任务时,我们可以把那个函数的指针作为参数传给那个函数,使它在适当的时候回调那个函数。

回调函数的特点

1.回调函数是由另一个函数指针调用的。

2.回调函数可以接受任何类型的数据,包括指针。

3.回调函数一般都是在单独的线程中执行,因此必须考虑线程安全问题。

4.回调函数中的代码应该尽量简单,因为它可能会被频繁地调用。

5.回调函数的调用方和被调用方应该在参数、返回值、函数名等方面达成一致。

回调函数的示例

#include <iostream>
using namespace std;

void sort(int a[],int n,int (*compare)(int,int))
{
    int i,j,temp;
    for(i=0;i<n-1;i++)
        for(j=i+1;j<n;j++)
            if(compare(a[i],a[j])>0)
            {
                temp=a[i];
                a[i]=a[j];
                a[j]=temp;
            }
}
int incre(int x,int y)
{
    return (x<=y)?-1:1;
}
int decre(int x,int y)
{
    return (x>=y)?-1:1;
}
int main()
{
    int a[10]={1,5,3,9,0,4,8,2,7,6};
    cout<<"incre order";
    sort(a,10,incre);
    for(int i=0;i<10;i++)
        cout<<a[i]<<" ";
    cout<<endl;
    cout<<"decre order";
    sort(a,10,decre);
    for(int i=0;i<10;i++)
        cout<<a[i]<<" ";
    cout<<endl;
    return 0;
}

普通函数

什么是普通函数

普通函数是一种普通的C++ 函数。

普通函数的特点

1.普通函数在调用时会将程序的执行权交给该函数,当函数结束时,执行权重新回到调用它的函数。

2.普通函数的定义通常放在类的外面。

3.普通函数可以使用函数的形参来传递数据,也可以使用函数的返回值来返回数据。

4.普通函数在定义时可以使用默认参数,即在函数参数列表中给出的初始值,在调用函数时有一项没有被赋值,将使用默认值。

普通函数的示例

#include<iostream>
using namespace std;

int add(int a,int b)
{
    return a+b;
}

int main()
{
    int a = 1, b = 2, ret;
    ret = add(a, b);
    cout<<ret<<endl;
    return 0;
}

以上就是C++中三种函数的详细讲解。需要注意的是:在使用inline关键字声明内联函数时,编译器不一定会将其内联,视编译器和函数体的复杂程度而定。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++知识点之inline函数、回调函数和普通函数 - Python技术站

(0)
上一篇 2023年6月26日
下一篇 2023年6月26日

相关文章

  • 详解Kotlin中的面向对象(一)

    以下是详解Kotlin中的面向对象(一)的完整攻略: 目录 引言 类和对象 属性和字段 定义方法 继承 接口 示例说明一:定义一个人的类 示例说明二:定义一个动物和猫咪的类 结论 引言 Kotlin是一种类型安全的对象导向语言,通过面向对象编程的方式来组织代码。在Kotlin中,类和对象是构建应用程序的基本构造块。 类和对象 在Kotlin中,我们使用cla…

    other 2023年6月26日
    00
  • php有效防止同一用户多次登录

    针对PHP有效防止同一用户多次登录的问题,可以采用以下的攻略: 1. 采用Session实现用户单一登录 使用Session技术记录登录用户的信息,这样只有在其它页面进行了注销操作或Session过期后,才能重新进行登录,从而有效实现每个用户只能在一个终端上登录。示例代码如下: //开启Session session_start(); if(isset($_…

    other 2023年6月27日
    00
  • JavaScript中layim之整合右键菜单的示例代码

    下面我将为你详细讲解“JavaScript中layim之整合右键菜单的示例代码”的完整攻略。 前言 layim 是一款适用于WebIM的 UI 框架,用于快速实现聊天界面。在聊天界面中,一些右键菜单的存在是非常必要的,比如选择文字、复制/粘贴、回复消息等等。本文将介绍如何在 layim 中整合右键菜单。 示例代码 layim.chat({ name: ‘田七…

    other 2023年6月27日
    00
  • Python实现批量修改文件名实例

    下面是 Python 实现批量修改文件名的完整攻略。 1. 获取文件夹所有文件名 首先,我们需要获取指定文件夹下的所有文件名。可以使用 Python 内置的 os 库,使用 os.listdir() 方法获取文件夹内所有文件的名称(不包括子文件夹),返回值是一个列表。 import os # 指定文件夹路径 folder_path = "/path…

    other 2023年6月26日
    00
  • Qt+QListWidget实现气泡聊天界面(附源码)

    下面是详细讲解“Qt+QListWidget实现气泡聊天界面(附源码)”的完整攻略: 1.准备工作 首先,需要在Qt中新建一个项目,选择”Qt Widgets Application”,然后依次填写项目名称、路径等信息即可。接着,在项目中添加一个QListWidget控件,并根据需要添加其他控件,比如QPushButton、QLineEdit等。 2.实现气…

    other 2023年6月27日
    00
  • word红头文件、公文的排版技巧

    关于“word红头文件、公文的排版技巧”,以下是我的建议: 1. 红头文件的制作 1.1 使用word模板 制作红头文件的一种常见方式是使用word模板。你可以下载一份现成的红头文件模板,并根据自己的需求进行修改。在编辑模板时,你必须注意以下几点: 合理安排版面:模板中应包含机关或单位名称、文件名称、时间、页码等项目。 选择合适字体:一般来说,红头文件中的字…

    other 2023年6月26日
    00
  • gradle仓库配置

    Gradle是一种基于JVM的构建工具,它可以帮助我们管理项目依赖、构建项目、运行测试等。在使用Gradle构建项目时,我们需要配置仓库以便Gradle可以从仓库中下载所需的依赖。本文将详细介绍如何Gradle仓库。 步骤1:打build.gradle文件 首先,我们需要打开项目中的build.gradle文件。该文件位于项目根目录下,用于配置Gradle构…

    other 2023年5月8日
    00
  • vim进入粘贴模式

    Vim进入粘贴模式的完整攻略 Vim是一种常用的文本编辑器,可以在Linux、Unix和Mac OS X等操作系统中使用。在Vim中,有时需要进入粘贴模式,以便更好地处理复制和粘贴的文本。本文将介绍如何进入Vim的粘贴模式,并提供两个示例说明。 进入粘贴模式 在Vim中,可以使用以下命令进入粘贴模式: :set paste 这个命令将Vim设置为粘贴模式,以…

    other 2023年5月9日
    00
合作推广
合作推广
分享本页
返回顶部