有些Stack Overflow用户强烈主张在编写函数时始终使用新的C ++ 11尾随返回类型约定,例如main()->int
。我可以看到优点,因为它使符号统一。但是,在声明函数指针时,我找不到任何使用尾随返回形式的方法,即可以声明
typedef int(*fp)(int);
或
using fp = int(*)(int);
获取int
并返回int
的函数指针。
有没有办法在声明这样的函数指针时使用新的尾部返回语法?例如,像
using fp = (*)(int)->int;
但这不会编译。如果没有,是否有理由说新语法不适用于函数指针?
答案 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;