函数返回另一个函数

Function returning another function

本文关键字:函数 另一个 返回      更新时间:2023-10-16

这个问题可能听起来很傻,但是为什么我们不能这样做呢?我的意思是,像下面这样的声明符:

void (foo())();

我已经阅读了当前c++标准的8.3.5节,并没有从那里找到它的含义。

标准是这样说的:

在声明T D中,其中D的形式为

D1 ( parameter-declaration-clause ) cv-qualifier-seqopt
ref-qualifieropt exception-specificationopt attribute-specifier-seqopt

,声明td1中包含的declarator-id的类型为" derived-declarator-type-list T ", D中declarator-id的类型的派生声明器类型列表函数是(参数声明子句返回T"。

所以,形式上,从那个定义意味着我的声明是一个有效的函数声明。在我的例子中,T D1的形式是void foo(),这是一个完全有效的声明。我错过了什么?

我已经阅读了当前c++标准的8.3.5节

显然不是很小心。§8.3.5 [dcl.fct]/p8:

函数不能有数组或函数类型的返回类型;尽管它们可能具有类型指针或引用的返回类型这样的事情。

我认为这是因为你不能创建一个函数的临时对象。然而,如果你打算做这样的事情,试着返回一个指向函数的指针。试试这个:

int (*fun())();

指针值可以由函数返回。你不能返回一个函数,因为没有函数类型