当我们有函数和lambda时,C++中使用的“块”是什么? 我发现这个奇怪的构造显然来自C,并被作为ObjuleC和C++使用。甚至还有。当我看到这个的时候,我真的很惊讶,我从来没有见过有人用过这个

当我们有函数和lambda时,C++中使用的“块”是什么? 我发现这个奇怪的构造显然来自C,并被作为ObjuleC和C++使用。甚至还有。当我看到这个的时候,我真的很惊讶,我从来没有见过有人用过这个,c++,clang,clang++,C++,Clang,Clang++,根据规范,您似乎可以使用以下语法声明块: // Declaration int (^x)(char); void (^z)(void); int (^(*y))(char) = &x; // Invocation x('a'); (*y)('a'); (true ? x : *y)('a') 块中的所有变量都是常量。这为什么有用 引用这些变量的块将变量作为常量变量导入 我在CopExcel中甚至找不到C++标准中的块。是否有人有任何链接或历史背景,说明这些存在的原因以及它们的用途 注

根据规范,您似乎可以使用以下语法声明块:

// Declaration
int (^x)(char);
void (^z)(void);
int (^(*y))(char) = &x;

// Invocation
x('a');
(*y)('a');
(true ? x : *y)('a')
块中的所有变量都是常量。这为什么有用

引用这些变量的块将变量作为常量变量导入

我在CopExcel中甚至找不到C++标准中的块。是否有人有任何链接或历史背景,说明这些存在的原因以及它们的用途


注:我已经充分地明白了这是一个C++扩展,可能是CLAN支持的。我的问题仍然存在——为什么我们需要这个?

< P>这是Objto-C或Objul-C++的A,并且等价于C++中的lambda。例如,块

int (^sqr)(int) = ^(int x) {return x*x};
在C++中可能是这样的:

auto sqr = [](int x) {return x*x;}

CulangValueObjy-C和Objul-C++。

这从来都不是合法的C++。我甚至找不到C++优先级的CopExcel中的块,这应该表示什么,比如它不是真的C++?当你说块是指内联的IF时?在C++和C++中,符号^是用于异或运算,而不是别的,我不知道管他的是什么,它当然不在任何兼容编译器中编译。好,很好,新程序员将不知不觉地使用另一个扩展,然后把问题发问为它是真的C++。就像VLA的一样。@PaulMcKenzie,公平地说,根据链接页面,这已经是12年前的事了,但一直没有发生。我不知道有什么新的发展,因为日期在2009年结束。