gpt4 book ai didi

c++ - 不同的函数指针语法作为另一个函数的参数

转载 作者:太空狗 更新时间:2023-10-29 20:14:35 26 4
gpt4 key购买 nike

int func ()
{
printf("foo()\n");
return 0;
}

void foo1 (int (*pf)()) { pf(); }
void foo2 (int (pf)()) { pf(); }
void foo3 (int pf()) { pf(); }

int main ()
{
foo1(func);
foo2(func);
foo3(func);
}

传递给 foo1()foo2()foo3() 的参数有什么区别。
所有 3 种语法 compiles fine in g++并以相同的方式行事。 3个技术上都是函数指针吗?
标记为 C,因为它也适用于此。

最佳答案

它们之间没有区别。第一个参数是指向函数类型的指针,而其他两个参数只是编写相同函数类型的两种方式。但是,与数组类型参数调整为指针的方式相同,函数类型参数也调整为指向函数的指针。来自 C++11 §8.3.5/5:

After determining the type of each parameter, any parameter of type [...] “function returning T” is adjusted to be [...] “pointer to function returning T,”

或来自 C99 §6.7.5.3/8:

A declaration of a parameter as “function returning type” shall be adjusted to “pointer to function returning type

因此第二个和第三个函数声明的参数类型调整为与第一个相同。

请注意,您可以在标识符周围放置任意数量的括号,它仍然是相同的函数类型:

void foo2 (int (((((pf)))))()) { pf(); }

关于c++ - 不同的函数指针语法作为另一个函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15862549/

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