我发现了一些奇怪的功能(希望我称之为正确)并且无法真正理解它的含义。 也许你可以帮助我,告诉它实际意味着什么以及如何使用它?
int (*foo(const unsigned i))(const int, const int)
{
... // code
return some_function;
}
它看起来像一个函数指针,但我看过的指针更像是这样:
void foo(int x, double (*pf)(int)); // function using function pointer as a parameter
double (*pf)(int); // function pointer declaration
感谢您的时间。
答案 0 :(得分:4)
它定义了一个名为foo
的函数,返回一个函数指针。
foo
获取名为const unsigned int
的{{1}}参数,并返回一个指向函数的指针,该函数需要两个i
并返回const int
。
答案 1 :(得分:1)
此
int (*foo(const unsigned i))(const int, const int);
是名为foo
的函数声明,它返回指向类型为int(const int, const int)
的函数的指针,并且有一个类型为const unsigned int
的参数。
考虑到您可以删除const限定符。这就是这两个声明
int (*foo(const unsigned i))(const int, const int);
和
int (*foo(unsigned i))(int, int);
声明相同的一个函数。
您可以使用typedef名称来简化声明。
这是一个示范程序
#include <iostream>
int (*foo(const unsigned i))(const int, const int);
int bar( int x, int y )
{
return x + y;
}
int baz( int x, int y )
{
return x * y;
}
int main()
{
std::cout << foo( 0 )( 10, 20 ) << std::endl;
std::cout << foo( 1 )( 10, 20 ) << std::endl;
return 0;
}
typedef int ( *fp )( int, int );
fp foo( unsigned i )
{
return i ? baz : bar;
}
它的输出是
30
200
而不是typedef声明
typedef int ( *fp )( int, int );
或
typedef int ( *fp )( const int, const int );
您也可以使用别名声明
using fp = int ( * )( int, int );
或
using fp = int ( * )( const int, const int );
甚至
using fp = int ( * )( const int, int );
和
using fp = int ( * )( int, const int );