这种功能如何运作?

时间:2017-05-29 23:00:04

标签: c++

我发现了一些奇怪的功能(希望我称之为正确)并且无法真正理解它的含义。 也许你可以帮助我,告诉它实际意味着什么以及如何使用它?

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

感谢您的时间。

2 个答案:

答案 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 );