函数返回另一个函数

Function returning another function

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

void (foo())();

我已经阅读了当前 C++ 标准的第 8.3.5 节,但没有从那里的内容中找到它的含义。

标准对此有如下说明:

In a declaration T D where D has the form

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

and the type of the contained declarator-id in the declaration T D1 is “derived-declarator-type-list T”, the type of the declarator-id in D is “derived-declarator-type-list function of (parameter-declaration-clause ) cv-qualifierseqopt ref-qualifieropt returning T”.

因此,正式地,根据该定义意味着我的声明是有效的函数声明。 T D1,在我的例子中有 void foo() 的形式,这是一个完全有效的声明。我错过了什么?

I've read the section 8.3.5 of the current C++ standard

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

Functions shall not have a return type of type array or function, although they may have a return type of type pointer or reference to such things.

我认为这是因为您不能创建函数的临时对象。但是,如果您打算做这样的事情,请尝试 return 指向函数的指针。试试这个:

int (*fun())();

指针值可以被函数return编辑。您不能 return 函数,因为没有函数类型。