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

veg*_*ego 9 c++

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

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


getData(total, ^{
  recvData(data, NULL);
});
Run Code Online (Sandbox Code Playgroud)

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

Kam*_*Cuk 3

很难找到带有^() {}符号的重复项,所以我会发布一个答案。

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

更多信息请参见wikiclans Language Specific for Blocks

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

  • 请注意,虽然它们在 C 和 C++ 代码中工作,但它们主要是围绕 Objective-C 世界设计的,如果您使用 C++,您几乎肯定应该使用更惯用的 lambda 和 std::function 而不是这些(尽管请注意,[std::function 可以保存块](/sf/ask/816850471/)) (3认同)