如何解释“ void(*)()”?

时间:2019-10-10 06:54:13

标签: c++ c++11 syntax semantics

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

void(*)()

如何解释?

3 个答案:

答案 0 :(得分:6)

它是一个指向函数类型的指针,可用于所有不带参数并返回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;

答案 1 :(得分:2)

这是指向函数的指针的类型,该函数不带任何参数并返回void

答案 2 :(得分:0)

在开闭括号(*)之间的星号表示函数指针的声明。此参数的左右分别代表它将指向的函数的返回类型和函数参数。

所以基本上就您而言:

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

void(*fPtr)() = printHello;

在C ++中,您可以使用更好的OOP方法执行相同操作:

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

您将必须包含functional标头