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

Posted

技术标签:

【中文标题】如何解释“void(*)()”?【英文标题】:How to interpret "void(*)()"? 【发布时间】:2020-02-07 13:18:46 【问题描述】:

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

void(*)()

如何解读?

【问题讨论】:

【参考方案1】:

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

所以基本上在你的情况下:

void printHello()

    std::cout<<"Hello";


void(*fPtr)() = printHello;

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

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

您必须包含 functional 标头

【讨论】:

【参考方案2】:

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

【讨论】:

只是为了完整:您像普通函数一样使用它们,所以func_1_ptr(); 调用function_1()【参考方案3】:

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

【讨论】:

以上是关于如何解释“void(*)()”?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查 googlemock 中作为 void 指针传递的字符串参数

如何解释 AudioBuffer 并获得力量?

如何解释构造函数中的返回语句?

如何解释 C 预处理器输出中的 # 前缀行?

我如何解释这个看似函数声明但不符合通常模式的声明?

调用newthread后如何获取线程索引?