我发现了这个奇怪的构造,它显然来自C,并且被Objective-C和C ++(作为扩展)所采用。甚至还有new development for it in clang。当我看到此消息时,我感到非常惊讶,而且从未见过有人使用过此消息。
根据规格,似乎您可以使用以下语法声明“块”:
// Declaration
int (^x)(char);
void (^z)(void);
int (^(*y))(char) = &x;
// Invocation
x('a');
(*y)('a');
(true ? x : *y)('a')
块内的所有变量都是常量转换的。为什么这有用?
引用这些变量的块会将变量作为const变量导入。
我什至找不到C ++标准中的块(基于cppreference)。是否有人对它们的存在及其用途有任何链接或历史背景?
注意:我已经很清楚地知道这是C ++扩展,可能是clang支持的。我的问题仍然存在-我们为什么需要这个?
这是block的Objective-C(或Objective-C ++),等效于C ++中的lambda。例如,块
int (^sqr)(int) = ^(int x) {return x*x};
在C ++中可能看起来像这样:
auto sqr = [](int x) {return x*x;}
clang同时支持Objective-C和Objective-C ++。