问题可能听起来很愚蠢,但为什么我们不这样做呢?我的意思是,声明者如下:
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()
形式,这是完全有效的解除。我错过了什么?
答案 0 :(得分:7)
我已阅读当前C ++标准的第8.3.5节
显然不是很仔细。 §8.3.5[dcl.fct] / p8:
函数不应具有类型数组或函数的返回类型, 虽然它们可能有返回类型的指针或引用类型 这样的事情。
答案 1 :(得分:1)
我认为这是因为你无法创建一个函数的临时对象。但是,如果您计划执行此类操作,请尝试返回指向函数的指针。试试这个:
int (*fun())();
指针值可以由函数返回。您无法返回函数,因为没有函数类型。