我发现这个处理多个函数指针解引用的代码意外编译,尽管看起来没有效果。这怎么编译?这是编译器中的错误吗?我在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?
}
答案 0 :(得分:3)
函数左值可以隐式转换为指向函数的指针([conv.func])。在您的示例中,函数在每次取消引用之前转换为指针。