我正在研究最令人烦恼的解析,我偶然发现了这样的事情:
Foo bar(Baz()); // bar is a function that takes a pointer to a function that returns a Baz and returns a Foo
这与 return-type(*name)(parameters)
的典型语法完全不同。括号是参数列表的括号,还是名称?
最佳答案
完全明确的形式:
Foo bar(Baz f());
bar
是一个接受单个参数 f
的函数,它是一个返回 Baz
的函数(不接受任何参数)。
不命名参数:
Foo bar(Baz ());
bar
最终采用指向函数的指针的原因是函数不能按值传递,因此将参数声明为函数会自动将其衰减为指针。上面的声明等价于:
Foo bar(Baz (*)());
// or:
Foo bar(Baz (*f)()); // with a named parameter
这类似于 void foo(int [10])
,其中 int [10]
也表示参数列表中的 int *
。
关于c++ - C++ 中未命名函数指针的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52581933/