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年前关闭。
            
                    
有以下代码:

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/

10-11 22:48
查看更多