7

http://clang.llvm.org/docs/BlockLanguageSpec.txt

看起来真的很酷。

然而,

  1. 我不明白。
  2. 我没有看到它的例子。
  3. 我没有看到很难在 C++ 中按原样表达的想法的例子,但是用块来表达是微不足道的。

任何人都可以启发我吗?

4

5 回答 5

14

块本质上是一种将代码和范围作为数据传递的方法。它们在其他一些语言中被称为闭包和匿名函数。

这是一篇包含更多详细信息和代码示例的文章。

于 2010-03-07T03:49:41.947 回答
10

NanoTech 已经链接到块的解释。至于这与 C++ 的关系,让我陈述一下我的个人观点:这个扩展在 C++中没有用。原因如下:

关于块引用类型:我们已经有了可以携带一些状态的“多态函数”,参见boost::functiontr1::function。C++ 将在其下一个标准库中包含一个完善的版本。与“C Blocks”相比的优势在于您不需要弄乱 and 之类的Block_copy东西Block_release。这些多态函数对象足够聪明,可以进行自己的内存管理。

关于块文字语法:这是一种很好的语法,允许您将代码放在它“所属”的位置,而无需太多样板代码。但这同样适用于它的 C++ 对应部分:C++0x lambdas。但是 C++0x 的 lambda 特性还允许您在紧密的内部循环中使用 lambda 对象,而不会由于可能的内联而导致函数调用的高性能成本。

由于 C++0x lambdas 也可用于性能问题且 std::function 更容易处理内存管理的情况,因此向 C++ 添加“C 块”似乎是多余的。“C 块”似乎更适合不支持模板或析构函数的语言。

于 2010-03-07T12:39:28.890 回答
2

它们基本上只是 Apple 对闭包/匿名函数的称呼。正如 Nikolai 所说,它们是您使用 Grand Central Dispatch 并行运行多个功能(因此使用超过 1 个内核)而不必担心线程和锁定的方式。

于 2010-03-07T03:49:10.607 回答
0

据我了解,此扩展适用于 Apple 的Grand Central Dispatch框架。块是可能并行运行的微小的可调度/可排队实体。

于 2010-03-07T03:43:55.267 回答