This question already has answers here:
Why do function pointer definitions work with any number of ampersands '&' or asterisks '*'?
(2个答案)
Function variable instead of pointer to function
(4个答案)
6年前关闭。
有以下代码:
语句
(2个答案)
Function variable instead of pointer to function
(4个答案)
6年前关闭。
有以下代码:
void a() { }
int main(){
a();
(****&a)();
return 0;
}
语句
(****&a)();
与a();
具有相同效果的情况如何? 最佳答案
这都是由于函数到指针的转换(第4.3节):
函数类型为T
的左值可以转换为类型为“指向T
的指针”的prvalue。结果是指向函数的指针。&a
首先为您提供指向a
的指针。然后,您可以使用*
取消引用它,从而获得函数本身。然后,您尝试取消对该函数的引用,但由于无法引用,因此将对其进行函数到指针的转换以再次获取指针。您用*
取消引用该指针,依此类推。
最后,(****&a)
表示函数a
,您可以调用它,因为您可以将()
应用于函数,而无需进行函数到指针的转换。
关于c++ - 为什么表达式a()和(****&a)()调用相同的函数? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16626033/