4
我發現這個處理多個函數指針解引用的代碼意外地編譯,儘管看起來不是有效的。這如何編譯?這是編譯器中的錯誤嗎?我在Ubuntu 14.04上使用gcc 4.8.2。爲什麼要在函數指針或返回函數指針的函數compliles之前放幾十個*?
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?
}
衰變mayhap:對函數的引用在帽子下落時衰減到函數指針。 '*'返回一個引用:下一個'*'衰減引用的功能然後解除引用它?等等。 – Yakk
好吧..它在C中崩潰。它只是在C++中有效。 – Brandon
是的,這是有道理的@雅克 –