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

yizhihongxing

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日

相关文章

  • Java基础之static的用法

    Java基础之static的用法 1. static关键字的概述 在Java中,static是一个关键字,它可以用来修饰类的成员。当成员被static修饰时,它就变成了该类的静态成员,也即类级别的成员。静态成员不属于类的任何实例对象,而是与类本身相关联。在使用静态成员时,不需要通过实例对象来访问,可以通过类名直接调用。 2. static修饰变量的用法 2.…

    other 2023年6月28日
    00
  • Android实现沉浸式状态栏功能

    Android实现沉浸式状态栏功能攻略 沉浸式状态栏是一种在Android应用中隐藏系统状态栏并使应用内容占据整个屏幕的功能。下面是实现沉浸式状态栏功能的完整攻略。 步骤一:设置主题样式 首先,在styles.xml文件中定义一个新的主题样式,用于设置沉浸式状态栏的属性。示例代码如下: <style name=\"AppTheme\&quot…

    other 2023年8月26日
    00
  • Android中TabLayout添加小红点的示例代码

    当在Android中使用TabLayout时,可以通过添加小红点来显示未读消息或其他通知。下面是一个完整的攻略,包含两个示例说明。 示例1:在TabLayout中添加小红点 首先,在XML布局文件中添加TabLayout和ViewPager: <androidx.constraintlayout.widget.ConstraintLayout … …

    other 2023年9月6日
    00
  • keil5创建基于rtx的stm32工程

    以下是Keil5创建基于RTX的STM32工程的完整攻略,包括以下内容: 概述 Keil5安装和配置 创建STM32工程 配置RTX内核 示例说明 1. 概述 Keil5是一款常用的嵌入式开发工具,可以用于开发各种嵌入式系统。本文将介绍如何使用Keil5创建基于RTX的STM32工程。 2. Keil5安装和配置 首先,需要下载并安装Keil5。安装完成后,…

    other 2023年5月9日
    00
  • Android中的Parcelable序列化对象

    下面是详细讲解“Android中的Parcelable序列化对象”的完整攻略: 什么是Parcelable Parcelable是一个序列化对象的接口,在Android中,如果我们想让一个Java对象能够在不同的组件或者进程间传递,那么这个Java对象必须去实现Parcelable接口从而达到序列化的目的。与Serializable相比,Parcelable…

    other 2023年6月27日
    00
  • layui加载数据显示loading加载完成loading消失的实例代码

    1. 基本思路 Layui提供了一个全局加载的效果,需要使用layer模块来实现。具体思路是:在数据加载之前显示loading图标,在数据加载完成之后隐藏loading图标。 2. 实现代码 下面是一个使用layui加载数据显示loading,完成后消失loading的实例代码: <!DOCTYPE html> <html> <…

    other 2023年6月25日
    00
  • 关于C++中构造函数初始化成员列表的总结

    首先,我们来简单介绍一下C++中构造函数初始化成员列表的概念。 在C++中,类的成员变量需要在构造函数中初始化,否则默认进行默认初始化。在构造函数的初始化列表中,我们可以对类的成员变量进行显式初始化,并且可以按照任意顺序完成。这样做可以提高程序的运行效率。 下面是C++中构造函数初始化成员列表的总结攻略: 构造函数初始化成员列表的语法 class 类名 { …

    other 2023年6月20日
    00
  • 听书王app如何查看版本号?听书王app查看版本号方法

    要查看\”听书王app\”的版本号,可以按照以下步骤进行操作: 打开\”听书王app\”:在您的设备上找到并点击\”听书王app\”的图标,以打开应用程序。 导航到设置页面:一旦\”听书王app\”打开,您将看到应用程序的主界面。在主界面上,通常会有一个菜单按钮或一个设置图标,点击它以打开应用程序的设置页面。 查找关于页面:在设置页面中,您需要查找一个关于或…

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