C++ C++;函数指针语法。为什么(*)有效,但*无效?

C++ C++;函数指针语法。为什么(*)有效,但*无效?,c++,c++11,C++,C++11,我正在为post fix计算器的作业编写一个程序。如果我不使用if语句(无开关、while或任何比较)就可以做到这一点,那么就有额外的积分。我在阅读有关函数指针的内容时,想到了以下代码: int main(){ unordered_map<char,int*(int,int)> m; m.insert({'+',[](int const a, int const b){return a+b;}}); } intmain(){ 无序地图m; m、 插入({'+',[]

我正在为post fix计算器的作业编写一个程序。如果我不使用if语句(无开关、while或任何比较)就可以做到这一点,那么就有额外的积分。我在阅读有关函数指针的内容时,想到了以下代码:

int main(){
    unordered_map<char,int*(int,int)> m;
    m.insert({'+',[](int const a, int const b){return a+b;}});
}
intmain(){
无序地图m;
m、 插入({'+',[](int const a,int const b){返回a+b;}});
}
这不管用

然而,这确实:

int main(){
    unordered_map<char,int(*)(int,int)> m;
    m.insert({'+',[](int const a, int const b){return a+b;}});
}
intmain(){
无序地图m;
m、 插入({'+',[](int const a,int const b){返回a+b;}});
}
为什么
(*)
*
不同?

类型

int* (int,int) 
函数是否接受
(int,int)
并返回
int*
,即指向
int
的指针。从另一方面来说

int (*) (int, int)
是指向函数的指针,该函数取
(int,int)
并返回
int
。因此,它们是不同的声明。在地图中插入的类型可以衰减到后者,而不是前者,这就是为什么后者代码可以工作,而前者不能

有用的:


非常有用:

如果没有参数,
int*
被解析为“指向int的指针”,其余的代码就不起作用了

对于paren,
int(*)
的意思是“指向返回int的函数的指针”,paren(以及它们所包含的内容)指定该函数的参数,因此它会按照您的需要进行解析