函数返回另一个函数
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 函数,因为没有函数类型。
这个问题听起来可能很傻,但为什么我们不能这样做呢?我的意思是,声明符如下所示:
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 函数,因为没有函数类型。