当我们有函数和lambda时,C ++中的“块”是什么?

问题描述 投票:0回答:1

我发现了这个奇怪的构造,它显然来自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支持的。我的问题仍然存在-我们为什么需要这个?

c++ clang clang++
1个回答
0
投票

这是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 ++。

© www.soinside.com 2019 - 2024. All rights reserved.