繁体   English   中英

C ++函数指针语法。 为什么(*)可以工作但不是?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM