在C ++中,^(){}和^ {}是什么意思?


10

我最近阅读了一些这样的C ++代码:

setData(total, &user, ^() {
  struct dst_t to = {ip, port};
  sendData(to, data);
});


getData(total, ^{
  recvData(data, NULL);
});

我从来没有见过^() {},也没有^{}。他们的意思是什么?某种匿名功能?


3
这是托管 C ++,又名C ++ / CLI吗?这是C#吗?
Thomas Matthews

^确保看起来像是宏,请尝试浏览#define语句。实际上,您可以运行gcc以下-E选项来扩展宏:g++ -E main.cpp
neshkeev

这是用clang编译的吗?
KamilCuk


Answers:


3

很难找到带有^() {}符号的重复项,因此我将发布答案。

这些是“块”,它是clang编译器扩展,可创建类似lambda的闭包。

更多信息,请访问Wikiclangs语言规范块

当参数列表为空时,(void)可以省略,^ { recvData(data, NULL); }与相同^ void (void) { recvData(data, NULL); }


3
请注意,尽管它们使用C和C ++代码工作,但它们主要是围绕Objective-C的世界而设计的,如果您使用的是C ++,则几乎可以肯定使用更多惯用的lambda和std :: function代替它们(尽管请注意std :: function可以容纳代码块
理查德·罗斯三世
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.