函数返回另一个函数

时间:2015-06-09 16:18:20

标签: c++ declaration language-lawyer

问题可能听起来很愚蠢,但为什么我们不这样做呢?我的意思是,声明者如下:

void (foo())();

我已经阅读了当前C ++标准的8.3.5部分,并且没有找到它在那里所说的含义。

以下是标准所说的内容:

  

在声明T D中,D的格式为

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

和声明T D1中包含的declarator-id的类型是   “derived-declarator-type-list T”,D中声明者id的类型   是“derived-declarator-type-list函数”   (parameter-declaration-clause)cv-qualifierseqopt ref-qualifieropt   返回T“。

因此,正式地说,根据该定义意味着我的declration是一个有效的函数declration。 T D1,在我的情况下具有void foo()形式,这是完全有效的解除。我错过了什么?

2 个答案:

答案 0 :(得分:7)

  

我已阅读当前C ++标准的第8.3.5节

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

  

函数不应具有类型数组或函数的返回类型,   虽然它们可能有返回类型的指针或引用类型   这样的事情。

答案 1 :(得分:1)

我认为这是因为你无法创建一个函数的临时对象。但是,如果您计划执行此类操作,请尝试返回指向函数的指针。试试这个:

int (*fun())();

指针值可以由函数返回。您无法返回函数,因为没有函数类型。