时间:2022-03-03 09:47:42 | 栏目:C代码 | 点击:次
特征
声明
// 声明1(加 inline,建议使用) inline int functionName(int first, int second,...);
定义
// 定义 inline int functionName(int first, int second,...) {/****/};
类内定义
// 类内定义,隐式内联 class A { int doA() { return 0; } // 隐式内联 }
类外定义
// 类外定义,需要显式内联 class A { int doA(); } inline int A::doA() { return 0; } // 需要显式内联
如下例程:
#include <iostream> using namespace std; class Base { public: inline virtual void who() { cout << "I am Base\n"; } virtual ~Base() {} }; class Derived : public Base { public: inline void who() // 不写inline时隐式内联 { cout << "I am Derived\n"; } }; int main() { // 此处的虚函数 who(),是通过类(Base)的具体对象(b)来调用的,编译期间就能确定了,所以它可以是内联的,但最终是否内联取决于编译器。 Base b; b.who(); // 此处的虚函数是通过指针调用的,呈现多态性,需要在运行时期间才能确定,所以不能为内联。 Base *ptr = new Derived(); ptr->who(); // 因为Base有虚析构函数(virtual ~Base() {}),所以 delete 时,会先调用派生类(Derived)析构函数,再调用基类(Base)析构函数,防止内存泄漏。 delete ptr; ptr = nullptr; system("pause"); return 0; }
更详细的回调函数理解可以查看本地的这个文章【【知识点】10张图让你彻底理解回调函数】
把a函数指针像参数传递那样传给b函数,而这个a函数会在某个时刻被b函数调用执行,这就叫做回调,a函数称为回调函数。如果回调函数立即被执行就称为同步回调,如果在之后晚点的某个时间再执行,则称之为异步回调。
先抛出答案:回调函数的好处和作用,那就是解耦,对,就是这么简单的答案,就是因为这个特点,普通函数代替不了回调函数。
如下代码:
int Callback_1() { printf("Hello"); printf("This is Callback_1 "); return 0; } int Callback_2() { printf("Hello"); printf("This is Callback_2 "); return 0; }
发现以上代码是可以解耦的,因为两个函数都执行了printf("Hello"),这个时候我们可以通过回调的方式进行解耦,如下:
#include<stdio.h> int Callback_1() // Callback Function 1 { printf("This is Callback_1 "); return 0; } int Callback_2() // Callback Function 2 { printf("This is Callback_2 "); return 0; } int Handle(int (*Callback)()) { printf("Entering Handle Function. "); Callback(); printf("Leaving Handle Function. "); } int main() { printf("Entering Main Function. "); Handle(Callback_1); Handle(Callback_2); printf("Leaving Main Function. "); return 0; }
像这样我们就减少了重复代码啦,也就是解耦。这是使用普通函数调用无法做到的。
1、对普通函数的调用:调用程序发出对普通函数的调用后,程序执行立即转向被调用函数执行,直到被调用函数执行完毕后,再返回调用程序继续执行。从发出调用的程序的角度看,这个过程为“调用-->等待被调用函数执行完毕-->继续执行”。
2、对回调函数调用:调用程序发出对回调函数的调用后,不等函数执行完毕,立即返回并继续执行。这样,调用程序执和被调用函数同时在执行。当被调函数执行完毕后,被调函数会反过来调用某个事先指定函数,以通知调用程序:函数调用结束。这个过程称为回调(Callback),这正是回调函数名称的由来。