C++ 下面的函数指针多个解引用是如何编译的?

C++ 下面的函数指针多个解引用是如何编译的?,c++,compilation,function-pointers,dereference,C++,Compilation,Function Pointers,Dereference,我知道使用函数指针,您可以使用 (*fptr)(); //or fptr(); 但是编译器如何实现这一点呢?他们是否完全忽略了引用标记,或者这里是否涉及更多内容 考虑这个有效的C++代码: void f1() { std::cout << "hi\n"; } int main() { auto f = f1; (********************f1)(); (*(*(*f1)))(); *************

我知道使用函数指针,您可以使用

 (*fptr)();
 //or 
 fptr(); 
但是编译器如何实现这一点呢?他们是否完全忽略了引用标记,或者这里是否涉及更多内容

考虑这个有效的C++代码:

void f1() { std::cout << "hi\n"; }
int main() {
    auto f = f1;
    (********************f1)();
    (*(*(*f1)))();
    ***************f1;
}

可能重复。请考虑int:
+++++42
上的一元+运算符。我们只应用操作符(它确实会衰减到函数引用的指针)。
auto pf1 = f1; // ok
auto pf2 = &f1; // ok 
//  auto pf3 = &(&(f1)); // does not compile