为什么在函数指针或返回函数指针的函数之前放入几十个*?

时间:2015-05-22 01:47:56

标签: c++ pointers

我发现这个处理多个函数指针解引用的代码意外编译,尽管看起来没有效果。这怎么编译?这是编译器中的错误吗?我在Ubuntu 14.04上使用gcc 4.8.2。

int addInt(int n,int m)      // function
{
    return n+m;
}

int (*(*functionFactoryPtr)(int n))(int, int); // pointer

int (*(functionFactory)(int n))(int, int)   // function
{
    std::cout << "Got parameter" <<  n << std::endl;
    int (*functionPtr)(int,int) = &addInt;
    return functionPtr;
}

int main()
{
    // functionFactoryPtr = @functionFactory;
    std::cout << (******(*****functionFactory)(4))(3,6) << std::endl;  // How is this not an error?

}

1 个答案:

答案 0 :(得分:3)

函数左值可以隐式转换为指向函数的指针([conv.func])。在您的示例中,函数在每次取消引用之前转换为指针。