在标准中,哪些函数不允许返回函数?我知道它们在概念上是荒谬的,但在我看来,语法允许它们。根据这个网页,一个"noptr-声明器[是]任何有效的声明器。“将包括一个函数的声明器:
int f()();关于语法的.
在我看来,dcl.decl中的语法允许
int f(char)(double)它可以解释为函数f,它接受一个char并返回一个与int g(double)具有相同签名的函数。
1 declarator:
2 ptr-declarator
3 noptr-declarator parameters-and-qualifiers trailing-return-type
4 ptr-declarator:
5 noptr-declarator
6 ptr-operator ptr-declarator
7 noptr-declarator:
8 declarator-id attribute-specifier-seq opt
9 noptr-declarator parameters-and-qualifiers
10 noptr-declarator [ constant-expression opt ] attribute-specifier-seq opt
11 ( ptr-declarator )
12 parameters-and-qualifiers:
13 ( parameter-declaration-clause ) cv-qualifier-seqAfter粗略地说,在1->2之后,2=4,4->6,4->6 -操作符,然后,使用4->5,5=7,7->8作为第一个声明符;使用4->5,5=7,7->9作为第二个和第三个声明器。
发布于 2020-08-27 16:23:29
using namespace std;
auto hello()
{
char name[] = "asdf";
return [&]() -> void
{
printf("%s\n", name);
};
}
int main()
{
hello()();
auto r = hello();
r();
return 0;
}发布于 2015-07-13 15:23:05
C的形式语法实际上不允许返回函数,但是,人们总是可以返回函数指针,从所有意图和目的来看,它似乎都是您想要做的:
int (*getFunc())(int, int) { … }我一心一意地说,语法,是对这种特征缺乏支持的一个更根本的解释。标准的规则是后一个问题。
如果语法没有提供完成某件事情的方法,我认为对于任何上下文无关的语言来说,语义或标准说什么并不重要。
发布于 2015-07-13 15:47:30
实际上,在C中,不能传递或返回函数。只能传递/返回函数的指针/地址,这在概念上是非常接近的。老实说,由于函数指针可能包含&和*,所以人们不应该真正关心函数或指针是否被传递(除非它包含任何静态数据)。下面是简单的函数指针声明:
void (*foo)();foo是指向函数的指针,返回空且不接受参数。
在C++中,这并没有太大的不同。对于所有可调用的创建,仍然可以使用C样式的函数指针或新的有用的std::function对象。C++还添加了lambda表达式,它们是内联函数,在某种程度上类似于函数语言中的闭包。它允许您不使所有传递的函数都是全局的。
最后,返回函数指针或std::function可能看起来很可笑,但实际上并非如此。例如,状态机模式(在大多数情况下)是基于返回指向函数的指针来处理下一个状态或可调用的下一个状态对象。
https://stackoverflow.com/questions/31387238
复制相似问题