gpt4 book ai didi

c++ - 理解这个复杂的声明

转载 作者:行者123 更新时间:2023-11-28 01:47:30 24 4
gpt4 key购买 nike

static void (* __set_malloc_handler(void (*__f)()))();

我认为__set_malloc_handler是一个函数指针,它指向一个函数,它也需要一个函数指针。但是,我不知道如何理解整个陈述。它是如何工作的?

最佳答案

使用一些别名更容易理解。

//pointer to function taking no arguments and void return
typedef void(*function_pointer)();

//function taking "function_pointer" and returning "function_pointer"
function_pointer __set_malloc_handler(function_pointer __f);

要阅读类似内容,我推荐 right-left rule .这是我经常使用的。还有一个 spiral rule ,但是当它没有形成完美的螺旋时我会很生气,而且我会因此而分心而无法集中注意力。您可能不会遇到这个问题。

任一页面上的解释都更详尽,但这里是速成类(class)。

基本上,将这些符号解读为:

  1. * = "指向"的指针
  2. (...) = "采用 ... 的函数"
  3. [...] = "数组大小 ..."

向右阅读,直到找到一个 ),它还没有匹配的 (。然后向左阅读,直到找到一个 ( 来匹配它。再次开始向右阅读。如果你击中右侧行尾,则向左阅读结束。

标识符 __set_malloc_handler 的右边是一个左括号 (,意味着它是一个函数。从那个到匹配的 的所有内容) 是参数类型。我建议先忽略它,然后再回来。一步一步:

       __set_malloc_handler(...)    //function taking ...
(*__set_malloc_handler(...)) //and returning a pointer
(*__set_malloc_handler(...))() //to a function taking no arguments
void (*__set_malloc_handler(...))() //that returns void

查看参数,我们有:

     (*__f)   //pointer
(*__f)() //to function taking no arguments
void (*__f)() //and returning void

关于c++ - 理解这个复杂的声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44350438/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com