[英]C++ function pointer syntax. Why does (*) work but * not?
我正在为修补计算器编写一个程序。 如果我可以不使用if语句(没有开关或同时或任何比较)就可以获得奖励积分。 我正在阅读有关函数指针的内容,并提出了以下代码:
int main(){
unordered_map<char,int*(int,int)> m;
m.insert({'+',[](int const a, int const b){return a+b;}});
}
这不起作用。
但这样做:
int main(){
unordered_map<char,int(*)(int,int)> m;
m.insert({'+',[](int const a, int const b){return a+b;}});
}
为什么(*)
和*
不同?
的类型
int* (int,int)
是函数take (int, int)
并返回int*
,即指向int
的指针。 另一方面,类型
int (*) (int, int)
是函数take (int, int)
和返回int
指针。 所以他们是不同的声明。 在你的地图中,你可以插入对后者有效的类型,而不是前者,这就是为什么后一个代码可以工作而不是前者。
有用: http : //www.cdecl.org/
超级有用: 顺时针/螺旋规则
没有parens, int*
被解析为“指向int的指针”,其余的代码不起作用。
使用parens, int (*)
表示“指向返回int的函数的指针”,而parens(以及它们包含的东西)指定该函数的参数,因此它们都会根据您的需要进行解析。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.