C++ C++;函数指针语法。为什么(*)有效,但*无效?
我正在为post fix计算器的作业编写一个程序。如果我不使用if语句(无开关、while或任何比较)就可以做到这一点,那么就有额外的积分。我在阅读有关函数指针的内容时,想到了以下代码: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、 插入({'+',[]
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(以及它们所包含的内容)指定该函数的参数,因此它会按照您的需要进行解析