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

vso*_*tco 28 c++ function-pointers c++11

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

typedef int(*fp)(int);

要么

using fp = int(*)(int);

一个函数指针取一个int并返回一个int.

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

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

但这不编译.如果没有,新语法不适用于函数指针是否有原因?

Rya*_*ing 25

你必须使用 auto

using fp = auto (*)(int) -> int;
typedef auto (*fp)(int) -> int; // alternatively
Run Code Online (Sandbox Code Playgroud)

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

对于函数也是如此,尽管如此

main() -> int {... }
Run Code Online (Sandbox Code Playgroud)

如果没有前面的内容,则无效 auto


Die*_*ühl 13

您想要其中一个取决于您是使用using声明还是typedef:

using fp = auto (*)(int)->int;
typedef auto (*gp)(int) -> int;
Run Code Online (Sandbox Code Playgroud)