如何解读"void(*)()"?

How to interpret "void(*)()"?

当我阅读shared_ptr时,我发现了一段代码:

void(*)()

如何解读?

这是指向函数的指针类型,它不带任何参数并且returns void

它是一个指向函数类型的指针,可以用于所有没有参数的函数和returns void.

例如:

void function_1() {}
void function_2() {}

void(*func_1_ptr)() = function_1; // or = &function_1;
void(*func_2_ptr)() = function_2; // or = &function_2;

现在 func_1_ptr 持有指向函数 function_1 的指针,而 func_2_ptr 持有指向 function_2 的指针。

您可以通过using 声明使类型更直观。

using FunPtrType = void(*)();

现在你可以写了

FunPtrType  func_1_ptr = function_1; // or = &function_1;
//Type      identifier   function
FunPtrType  func_2_ptr = function_2; // or = &function_2;

open-close 括号之间的星号 (*) 代表 function-pointer 的声明。 this的左边和右边代表return它将指向的函数的类型和函数参数。

基本上你的情况是:

void printHello()
{
    std::cout<<"Hello";
}

void(*fPtr)() = printHello;

在 C++ 中,您可以使用更好的 OOP 方式来做同样的事情:

std::function<void()> fPtr = printHello;
fPtr();

您必须包含 functional header