返回指向函数的指针

时间:2020-01-04 00:28:33

标签: c++ c++11

5516 Example Name
1548 Bob Jones
604 James Jones
100 AAA
100 BBB

为什么第一个函数不能编译? 我对星号*应该使用变量/函数名还是使用修饰符感到困惑?

1 个答案:

答案 0 :(得分:1)

auto f() -> T

声明一个函数f,该函数返回类型为T的值。这里的auto不是占位符类型。就在这里,因为这就是带有尾随返回类型的函数声明符的语法,看起来像[dcl.fct]/2。声明带有尾随返回类型的函数时,不会进行类型推导。尾随返回类型只是用于编写显式返回类型的一种替代语法,该显式返回类型恰好也包含关键字auto,但其容量不同于其正常值。

另一方面,像这样的声明符

auto f()

使用auto作为占位符类型,这意味着要推导出已声明函数的返回类型。

auto *bar(decltype(foo) *a) -> F

使用auto作为占位符返回类型(它向其中添加*,仅在将auto用作占位符类型时才有意义),但它还会尝试对末尾的尾随返回类型。那不是工作原理。您可以 使用尾随返回类型占位符类型。两者同时没有任何意义。您要么想推导一种类型,要么想说出应该是什么类型……

auto bar2(decltype(foo)* a) -> F*

之所以起作用,是因为该声明符只声明了一个尾随返回类型为F*的函数…