C++ 回调概念与正常调用

C++ 回调概念与正常调用,c++,c,C++,C,我很困惑 我们知道所有函数都定义为全局函数,所以我们可以在任何块内调用和使用任何函数,而无需将其作为参数传递 为什么我们使用函数回调概念,而我们可以在任何函数中使用函数而不传递它 那么我们为什么要使用回调概念呢?回调概念意味着为其他函数提供一个函数,以便在需要执行某些操作时调用,例如在事件发生时调用。这通常还意味着我们可以更改要在运行时调用的函数 这样,调用函数就不需要知道何时调用什么。例如,第三方库为用户程序定义回调,以便将“插件”功能“插入”到库中,或者在发生事件、达到状态或发生错误时调用,

我很困惑


我们知道所有函数都定义为全局函数,所以我们可以在任何块内调用和使用任何函数,而无需将其作为参数传递

为什么我们使用函数回调概念,而我们可以在任何函数中使用函数而不传递它


那么我们为什么要使用回调概念呢?

回调概念意味着为其他函数提供一个函数,以便在需要执行某些操作时调用,例如在事件发生时调用。这通常还意味着我们可以更改要在运行时调用的函数

这样,调用函数就不需要知道何时调用什么。例如,第三方库为用户程序定义回调,以便将“插件”功能“插入”到库中,或者在发生事件、达到状态或发生错误时调用,并且库需要知道如何处理错误


这只是一个简单的答案。谷歌搜索更多信息并查看

,原因与使用变量而不是常量相同

将回调传递给函数允许该函数根据调用方式调用不同的回调


在函数内部按名称调用函数将始终调用该函数。

在运行时的各种情况下,可能需要不同的回调。例如
qsort
库函数。在任何情况下,库函数在知道您使用它之前就已经编译好了。“我们知道所有函数都定义为全局函数,因此我们可以调用和使用任何块中的任何函数,而无需将其作为参数传递”,wut?通常,当一个函数不在另一个函数的作用域中时会使用回调,您可以传递一个函数指针,以便在可以调用该函数的作用域之外使用该函数。经典的例子是一个排序函数,这里对它进行了很好的解释,因为有时您不知道应该在编译时调用什么函数,请参见
qsort
。此外,在C++中使用全局范围函数通常是不赞成的,尤其是当它可能会破坏封装时,我会不同地查看回调函数。当我们希望另一个程序(比如操作系统)为我们的程序做一些事情(或者通知我们)时,我们使用回调机制。对于回调,我认为典型的例子是线程创建,在这里我们定义并实现一个函数,该函数通过指向线程创建函数的指针传递。在某个时刻,操作系统会调用我们的进程空间,并创建一个线程来运行我们指定的程序。