使用具有尾随返回类型的函数指针

时间:2014-12-15 05:55:22

标签: c++ c++11 function-pointers

有些Stack Overflow用户强烈主张在编写函数时始终使用新的C ++ 11尾随返回类型约定,例如main()->int。我可以看到优点,因为它使符号统一。但是,在声明函数指针时,我找不到任何使用尾随返回形式的方法,即可以声明

typedef int(*fp)(int);

using fp = int(*)(int);

获取int并返回int的函数指针。

有没有办法在声明这样的函数指针时使用新的尾部返回语法?例如,像

using fp = (*)(int)->int;

但这不会编译。如果没有,是否有理由说新语法不适用于函数指针?

2 个答案:

答案 0 :(得分:25)

您必须使用auto

using fp = auto (*)(int) -> int;
typedef auto (*fp)(int) -> int; // alternatively

尾随返回类型语法意味着您将auto放在函数名之前以指示返回类型如下(或者在c ++ 14的情况下,应该推导出)。对于函数指针,同样的规则适用,除了它不能推导它(出于显而易见的原因)。

对于函数也是如此,例如

main() -> int {... }
如果没有前面的auto

无效

答案 1 :(得分:13)

根据您使用的是using声明还是typedef,您需要其中一种:

using fp = auto (*)(int)->int;
typedef auto (*gp)(int) -> int;